我试图用R编写一个函数,该函数根据分组变量汇总数据帧。分组变量作为列表给出并传递给group_by_at,我想对其进行参数化。
我现在正在做的是这样的:
library(tidyverse)
d = tribble(
~foo, ~bar, ~baz,
1, 2, 3,
1, 3, 5
4, 5, 6,
4, 5, 1
)
sum_fun <- function(df, group_vars, sum_var) {
sum_var = enquo(sum_var)
return(
df %>%
group_by_at(.vars = group_vars) %>%
summarize(sum(!! sum_var))
)
}
d %>% sum_fun(group_vars = c("foo", "bar"), baz)
Run Code Online (Sandbox Code Playgroud)
但是,我想这样调用该函数:
d %>% sum_fun(group_vars = c(foo, bar), baz)
Run Code Online (Sandbox Code Playgroud)
这意味着不应在调用中评估分组变量,而应在函数中评估分组变量。我将如何重写该功能以启用该功能?
我试过enquo像summary变量一样使用,然后替换group_vars为!! group_vars,但这会导致此错误:
Error in !group_vars : invalid argument type
Run Code Online (Sandbox Code Playgroud)
使用group_by(!!!group_vars)收益:
Column `c(foo, …Run Code Online (Sandbox Code Playgroud)