Я хотел бы извлечь некоторые данные с сервера sql с помощью динамического фильтра. Я использую большой пакет R dplr следующим образом:
#Create the filter
filter_criteria = ~ column1 %in% some_vector
#Connect to the database
connection <- src_mysql(dbname <- "mydbname",
user <- "myusername",
password <- "mypwd",
host <- "myhost")
#Get data
data <- connection %>%
tbl("mytable") %>% #Specify which table
filter_(.dots = filter_criteria) %>% #non standard evaluation filter
collect() #Pull data
Этот фрагмент кода работает отлично, но теперь я хотел бы как-то его закодировать во всех столбцах моей таблицы, поэтому я хотел бы написать фильтр как:
#Dynamic filter
i <- 2 #With a loop on this i for instance
which_column <- paste0("column",i)
filter_criteria <- ~ which_column %in% some_vector
И затем повторно примените первый код с обновленным фильтром.
К сожалению, этот подход не дает ожидаемых результатов. На самом деле это не дает никакой ошибки, но даже не приводит никакого результата в R. В частности, я немного посмотрел на SQL-запрос, созданный двумя частями кода, и есть одно важное отличие.
В то время как первый, рабочий, код генерирует запрос формы:
SELECT ... FROM ... WHERE
`column1` IN ....
(`знак в имени столбца), второй генерирует запрос формы:
SELECT ... FROM ... WHERE
'column1' IN ....
('знак в имени столбца)
Есть ли у кого-нибудь предложения о том, как сформулировать условие фильтрации, чтобы заставить его работать?