R to_lower не работает, когда выполняется на таблице БД - PullRequest
0 голосов
/ 27 мая 2019

У меня есть таблица, которую я извлекаю из соединения DBI:

con <- DBI::dbConnect(odbc::odbc(),
                      Driver   = "SQL Server",
                      Server   = "server",
                      Database = "database",
                      UID      = "user",
                      PWD      = "pwd",
                      Port     = "port")


tbl_A <- tbl(con,"tbl_A")

Мне нужно выполнить некоторые операции фильтрации в столбце «Имя», которые чувствительны к регистру, поэтому мне нужно добавить столбец lower_name:

tbl_A <- tbl_A %>% mutate(lower_name = to_lower(Name))

Это дает следующую ошибку:

Ошибка в result_fetch (res @ ptr, n, ...): nanodbc / nanodbc.cpp: 2836: 07009: [Microsoft] [Драйвер ODBC SQL Server] Недопустимый индекс дескриптора

Я не понимаю, почему он возвращает эту ошибку, поскольку операция работает нормально при применении к той же таблице, записанной в csv:

tbl_A <- tbl(con,"tbl_A")
write.csv(tbl_A, file = "data/tbl_A.csv",row.names=FALSE)
tbl_A_csv <- read.csv("data/tbl_A.csv",stringsAsFactors = FALSE)

tbl_A_csv <- tbl_A_csv %>% mutate(lower_name = to_lower(Name))

возвращаеттаблица с новым столбцом lower_name добавлена ​​правильно.

Запись таблицы в csv перед выполнением операций является исправлением, но было бы лучше не записывать таблицы в файлы csv.

Обратите внимание, чтоИмя столбца типа <chr>.

Почему это не работает, когда выполняется на tbl_A, но работает на экспортированный файл CSV?Как заставить это работать без необходимости записывать всю таблицу в csv?

...