Sim*_*.A. 5
正确的方法,但 dbplyr 倾向于使用可以接收!!
运算符('bang-bang'运算符)的东西更好地工作。在某一时刻,dplyr 具有接受文本输入*_
的函数版本(例如)。filter_
现在这是使用 NSE(非标准评估)完成的。
一些参考资料:shiptech和r-bloggers(抱歉找不到官方的 dplyr 参考资料)。
出于您的目的,您应该找到以下作品:
library(rlang)
df %>% dplyr::filter(!!parse_expr(eval_text))
全面工作:
library(dplyr)
library(dbplyr)
library(rlang)
data(mtcars)
df = tbl_lazy(mtcars, con = simulate_mssql()) # simulated database connection
implode <- function(..., sep='|') { paste(..., collapse=sep) }
selected_col <- c("wt", "drat")
text <- paste(selected_col, ">3")
eval_text <- implode(text)
df %>% dplyr::filter(eval(parse(eval_text))) # returns clearly wrong SQL
df %>% dplyr::filter(!!parse_expr(eval_text)) # returns valid & correct SQL
df %>% dplyr::filter(!!!parse_exprs(text)) # passes filters as a list --> AND (instead of OR)
更多推荐
eval,dbplyr
发布评论