【发布时间】:2014-12-17 00:10:36
【问题描述】:
我想从带有动态过滤器的 sql 服务器中提取一些数据。我正在通过以下方式使用出色的 R 包 dplyr:
#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 ....
('签入列名)
有人对如何制定过滤条件以使其发挥作用有任何建议吗?
【问题讨论】:
标签: r lazy-evaluation dplyr