2017-05-24 56 views
2

这是新的dplyr,即将发布。在dplyr中以编程方式指定的多个变量进行分组0.6

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的签名保持不变,即我将分组变量指定为单个向量,而不是通过参数...

+0

其实,'F(G1)'不能正常工作。尝试'f(g1)%>%汇总(n = n())'。 – JasonWang

回答

1

有一个非常类似的问题:Programming with dplyr using string as input。我只是修改了答案,使用syms!!!

library(rlang) 
f <- function(x){ 
    group_by(mtcars, !!!syms(x)) 
} 

f(c("cyl")) %>% summarise(n()) 
# A tibble: 3 x 2 
    cyl `n()` 
    <dbl> <int> 
1  4 11 
2  6  7 
3  8 14 

f(c("cyl", "gear")) %>% summarise(n()) 
# A tibble: 8 x 3 
# Groups: cyl [?] 
    cyl gear `n()` 
    <dbl> <dbl> <int> 
1  4  3  1 
2  4  4  8 
3  4  5  2 
4  6  3  2 
5  6  4  4 
6  6  5  1 
7  8  3 12 
8  8  5  2 
相关问题