【发布时间】:2017-10-25 10:54:43
【问题描述】:
这是新的 dplyr,即将发布。
dplyr programming vignette 给出了一个使用外部函数中指定的分组变量调用group_by 的示例:
my_summarise <- function(df, group_var) {
df %>%
group_by(!!group_var) %>%
summarise(a = mean(a))
}
这在提供单个分组变量时有效。但是,它会因多个变量而失败。
简化示例:
f <- function(x)
{
group_by(mtcars, !!x)
}
## works
g1 <- "cyl"
f(g1)
## doesn't work
#Error in mutate_impl(.data, dots) :
# Column `c("cyl", "gear")` must be length 32 (the number of rows) or one, not 2
g2 <- c("cyl", "gear")
f(g2)
如何在 rlang 框架内解决此问题?
理想情况下,我希望f 的签名保持不变,即我将分组变量指定为单个向量,而不是通过... 参数。
【问题讨论】:
-
其实
f(g1)也不好用。试试f(g1) %>% summarize(n=n())。