我不确定我要做的事情是否有意义。
我想做以下操作:
fun <- function(df, args){
.....
df %>%
group_by(args)
.....
我试图通过args传递一个char矢量,然后按ARGS作为列名进行组,但它不起作用。
我尝试过 get 和 mget ,它们不按我想要的方式工作。
这是如何实现这一目标的一个小例子。您传递一串ARG,我们使用rlang
的syms
将其转变为符号列表。然后,我们将!!!
Unquote-Splice操作员通过这些符号进行分组。
library(rlang)
library(dplyr)
fun <- function(df, args){
by <- syms(args)
df %>%
group_by(!!!by) %>%
summarize_all(mean)
}
使用mtcars
:
> fun(mtcars, c("cyl"))
# A tibble: 3 x 11
cyl mpg disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 4.00 26.7 105 82.6 4.07 2.29 19.1 0.909 0.727 4.09 1.55
2 6.00 19.7 183 122 3.59 3.12 18.0 0.571 0.429 3.86 3.43
3 8.00 15.1 353 209 3.23 4.00 16.8 0 0.143 3.29 3.50