我有这样一种情况,我需要划分数据库中的列,即across()
多列。当除数列固定时,我可以使用!!rlang::sym()
指定正确的列,但我有一个示例,其中除数列作为当前列名(即gsub("_lump_sum","_lump_noNAcount",dplyr::cur_column()
)的函数而更改。
请参见下面的示例:
library(dplyr, warn.conflicts = FALSE)
con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
copy_to(con, name ="mtcars", df=mtcars %>% mutate(across(c(gear,carb),~.*2,.names = "{col}_2")))
# This works as intended
tbl(con,"mtcars") %>%
summarise(across(any_of(c("vs","am")),~sum(.)/sum(!!sym("wt"))))
# This doesn't work
tbl(con,"mtcars") %>%
summarise(across(any_of(c("gear","carb")),~sum(.)/sum(!!sym(paste0(cur_column(),"_2")))))
# Error in `cur_column()`:
# ! Must be used inside `across()`.
我意识到cur_column()
不能与!!
一起使用,但我还需要在它进入数据库之前对其求值,因为cur_column()
也不能在数据库端求值。
有没有其他方法来做这件事?谢谢
1条答案
按热度按时间9lowa7mx1#
dbplyr
的最新开发版本允许使用dbplyr::sql
进行这种类型的评估,即: