我正在尝试在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)
然而,我希望这样调用函数:
d %>% sum_fun(group_vars = c(foo, bar), baz)
这意味着分组变量不应在调用中进行评估,而应在函数中进行评估。我该如何重写该函数以实现此功能?
我尝试使用 `enquo` 来处理汇总变量,然后将 `group_vars` 替换为 `!! group_vars`,但会导致以下错误:
Error in !group_vars : invalid argument type
使用group_by(!!!group_vars)
会产生以下结果:
Column `c(foo, bar)` must be length 2 (the number of rows) or one, not 4
如何适当地重写该函数?
sum_fun
中,我想要有一个名为.additional_var
的额外参数,它会在group_by_at
调用中附加到.group_vars
中,该怎么办? - slhck