好的,这感觉应该是相对容易的,但是尽管我已经尝试了几十种使用quote
, eval
, substitute
, enquote
,parse
等的方法summarize_
......我还没有让它工作。基本上我试图计算这样的东西 - 但参数的变量表达式summarise
:
mtcars %>% group_by(cyl) %>% summarise(wt=mean(wt),hp=mean(hp))
产生:
# A tibble: 3 × 3
cyl wt hp
<dbl> <dbl> <dbl>
1 4 2.285727 82.63636
2 6 3.117143 122.28571
3 8 3.999214 209.21429
我尝试过的一件事是:
x2 <- "wt=mean(wt),hp=mean(hp)"
mtcars %>% group_by(cyl) %>% summarise(eval(parse(text=x2)))
产生:
Error in eval(substitute(expr), envir, enclos) :
<text>:1:12: unexpected ','
1: wt=mean(wt),
但是离开第二个参数 ( ",hp=mean(hp"
) 不会让你更进一步:
> x2 <- "wt=mean(wt)"
> mtcars %>% group_by(cyl) %>% summarise(eval(parse(text=x2)))
Error in eval(substitute(expr), envir, enclos) : object 'wt' not found
我将省去我尝试过的所有其他事情 - 我显然遗漏了一些关于如何在函数参数中处理表达式的内容。
那么这里的正确方法是什么?请记住,我最后真的想要这样的东西:
getdf <- function(df,sumarg){
df %>% group_by(cyl) %>% summarise(sumarg)
df
}
也不确定在 R 世界中我应该使用什么样的标签来进行这种查询。元编程?