Size: a a a

R (язык программирования)

2020 July 29

AS

Alexander Semenov in R (язык программирования)
Артём Клевцов
А про неявные преобразования типов при сравнении строк с не понятно чем ты так и не понял, очевидно. А было бы полезно на будущее знать, что при сравнеии строк с чем либо, это что-либо преобразуется в строки.
Ну я же не сам придумал так по датам фильтровать. Вот из первого попавшегося ответа на SO пример: filter(mydf, date >= "2014-12-02", date <= "2014-12-05")

Всю жизнь так пишу. С "ответом" не сошлось только сейчас.
источник

AS

Alexander Semenov in R (язык программирования)
Сейчас-то, естественно, разберусь и приму меры.
источник

АК

Артём Клевцов... in R (язык программирования)
Ещё один пример того, что бездумно копипасть не следует. При сравнении разных типов всегда будут неявные преобразования. А вот что во что будет преобразовано зависит от многих факторов и поэтому всегда следует явно приводить типы.
источник

АК

Артём Клевцов... in R (язык программирования)
POSIXct - коварный тип, т.к. имеет привязку к локальному часовому поясу и ориентируется на переменную окружения TZ.
источник

PU

Philipp Upravitelev in R (язык программирования)
Артём Клевцов
Думаю, что да, но лучше проверить эмпирически. Твоя регулярка должна оптимизировать через повторяемость ({n} - где n количество элементов внутри |).
сравнил в presto два выражения, правда, по одному вот этому примеру
регулярка пилит в полтора раза дольше, чем сплит
но я хз, как оно на большом массиве будет работать. по идее, там не должно быть нелинейного увеличения времени
источник

PU

Philipp Upravitelev in R (язык программирования)
Артём Клевцов
POSIXct - коварный тип, т.к. имеет привязку к локальному часовому поясу и ориентируется на переменную окружения TZ.
собственно, поэтому я при работе с бд явно выставляю зону gmt в r-сессии %)
источник

AS

Alexander Semenov in R (язык программирования)
Так вот куда у меня в отчётах миллионы пропадают...
источник

PU

Philipp Upravitelev in R (язык программирования)
:))))
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Спасибо. Надо попробовать RMSSQL (хотя меня немного напрягает, что там последние изменения были 5 лет назад)

Пока ничего не помогает в записи данных в таблицу. Есть подозрение, что проблема с тем, что в таблицы в БД есть nvarchar колонки. Указание типов колонок в аргументе field.types проблему не решило.

RODBC::sqlSave выкидывает из сессии вообще.
DBI::dbWriteTable выдаёт ошибку nanodbc/nanodbc.cpp:1617: 00000: [Microsoft][ODBC Driver 17 for SQL Server]Invalid character value for cast specification

Гугление предлагает костыли. Видимо придётся писать универсальную функцию создания sql запроса на запись данных))
источник

AS

Alexey Seleznev in R (язык программирования)
Дмитрий Володин
Спасибо. Надо попробовать RMSSQL (хотя меня немного напрягает, что там последние изменения были 5 лет назад)

Пока ничего не помогает в записи данных в таблицу. Есть подозрение, что проблема с тем, что в таблицы в БД есть nvarchar колонки. Указание типов колонок в аргументе field.types проблему не решило.

RODBC::sqlSave выкидывает из сессии вообще.
DBI::dbWriteTable выдаёт ошибку nanodbc/nanodbc.cpp:1617: 00000: [Microsoft][ODBC Driver 17 for SQL Server]Invalid character value for cast specification

Гугление предлагает костыли. Видимо придётся писать универсальную функцию создания sql запроса на запись данных))
Лучше odbc попробовать, именно его RStudio рекомендует
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Alexey Seleznev
Лучше odbc попробовать, именно его RStudio рекомендует
Да, когда столкнулся с задачей, действовал по инструкции на сайте RStudio. Но вот эта задачка никак не разрешается.  Почти уверен,  что дело в nvarchar именно.
источник

PU

Philipp Upravitelev in R (язык программирования)
Дмитрий Володин
Да, когда столкнулся с задачей, действовал по инструкции на сайте RStudio. Но вот эта задачка никак не разрешается.  Почти уверен,  что дело в nvarchar именно.
может, загнать все строками и потом уже на стороне бд обработать?
источник

PU

Philipp Upravitelev in R (язык программирования)
Invalid character value for cast specification
я бы еще проверил на наличие каких-нибудь левых символов в ваших данных
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Philipp Upravitelev
может, загнать все строками и потом уже на стороне бд обработать?
Если бы надо было таблицу создавать, то да. А мне обновлять надо.

А вот левые символы - это какие? В строках кириллица и латиница, максимум есть /
источник

ДВ

Дмитрий Володин... in R (язык программирования)
В целом решение есть, через формирование запроса функцией из данных и отправкой его в БД. Но хочется чего-то более элегантного и унифицированного для разных таблиц
источник

PU

Philipp Upravitelev in R (язык программирования)
во-первых, можно создать промежуточную таблицу
а потом парой операций обработать эту таблицу и результат вставить в целевую, и дропнуть промежуточную
во-вторых, левые символы - всякие непечатные символы, и прочее, миллион всего может быть. вы их даже визуально не отловите, так как R их может не отображать в таблице
источник

АН

Алексей Нагорский... in R (язык программирования)
Дмитрий Володин
Спасибо. Надо попробовать RMSSQL (хотя меня немного напрягает, что там последние изменения были 5 лет назад)

Пока ничего не помогает в записи данных в таблицу. Есть подозрение, что проблема с тем, что в таблицы в БД есть nvarchar колонки. Указание типов колонок в аргументе field.types проблему не решило.

RODBC::sqlSave выкидывает из сессии вообще.
DBI::dbWriteTable выдаёт ошибку nanodbc/nanodbc.cpp:1617: 00000: [Microsoft][ODBC Driver 17 for SQL Server]Invalid character value for cast specification

Гугление предлагает костыли. Видимо придётся писать универсальную функцию создания sql запроса на запись данных))
Смотрели что в профайлере?
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Philipp Upravitelev
во-первых, можно создать промежуточную таблицу
а потом парой операций обработать эту таблицу и результат вставить в целевую, и дропнуть промежуточную
во-вторых, левые символы - всякие непечатные символы, и прочее, миллион всего может быть. вы их даже визуально не отловите, так как R их может не отображать в таблице
Спасибо. Пока оставлю костыль с формированием текста запроса и отправкой его в БД)

С символами надо посмотреть. Тут скорее даже обидно, что pandas.to_sql справляется, пусть и с указанием типов колонок, а R нет))

Если вдруг найду элегантное решение - отпишусь.
источник

AP

Anton Pysanka in R (язык программирования)
Дмитрий Володин
В целом решение есть, через формирование запроса функцией из данных и отправкой его в БД. Но хочется чего-то более элегантного и унифицированного для разных таблиц
сегодня наталкивался на открытый вопрос на гитхабе DBI по поводу проблем с запросом к БД, где запрашивается длинное текстовое поле – когда эта колонка была не в конце запроса, людям выдавало ошибку, как вы написали. но это касалось запрашивания, а не записи
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Алексей Нагорский
Смотрели что в профайлере?
У меня и прав-то таких нет. Поговорю с админами))
источник