R 将列名传递到函数中

R 将列名传递到函数中,r,dplyr,tidyverse,non-standard-evaluation,R,Dplyr,Tidyverse,Non Standard Evaluation,对于非标准求值,我有一个简单的问题:将变量名作为参数传递到函数中 作为一个可重复的例子,这里有一件简单的事情:从mtcars数据集中取一个变量的平均值,mpg。我的最终目标是拥有一个函数,在这里我可以输入数据集和变量,并获得平均值 因此,如果没有函数: 库(tidyverse) mtcars%>%汇总(平均值=平均值(mpg)) #>卑鄙 #> 1 20.09062 我尝试使用get()进行非标准评估,但出现了以下错误: 库(tidyverse) 汇总统计百分比汇总(平均值=获取(变量)) }

对于非标准求值,我有一个简单的问题:将变量名作为参数传递到函数中

作为一个可重复的例子,这里有一件简单的事情:从
mtcars
数据集中取一个变量的平均值,
mpg
。我的最终目标是拥有一个函数,在这里我可以输入数据集和变量,并获得平均值

因此,如果没有函数:

库(tidyverse)
mtcars%>%汇总(平均值=平均值(mpg))
#>卑鄙
#> 1 20.09062
我尝试使用
get()
进行非标准评估,但出现了以下错误:

库(tidyverse)
汇总统计百分比汇总(平均值=获取(变量))
}
汇总统计数据(mpg、mtcars)
#>错误:`summary()`input`mean`有问题。
#>x无效的第一个参数
#> ℹ 输入'mean'是'get(变量)`。
由(v0.3.0)于2020年9月19日创建

编辑: 我还有一个补充问题

我还需要
变量
参数作为
字符
字符串,我尝试了下面的代码,但我仍然不知道如何做到这一点:

库(tidyverse)
summary_stats%summary(平均值=平均值({variable}}))
打印(作为.character({{variable}}))
}
汇总统计数据(显示、mtcars)
#>打印错误(如.character({:object'disp'未找到

由(v0.3.0)创建于2020-09-19。您可以使用curly-curly(
{{}}
)操作符将列名作为无引号变量传递

要获得作为字符值传递的变量,我们可以使用
deparse
substitute

library(dplyr)
library(rlang)

summary_stats <- function(variable, dataframe){
  print(deparse(substitute(variable)))
  dataframe %>% summarise(mean = mean({{variable}}))
}

这是dplyr的小插曲,你会发现它对tidyeval=>之类的东西很有帮助。对于将来阅读这个问题的人来说,@theairbend3r的链接正是那种可以逐步找到答案的文档,这正是我想要的。我还有一个后续问题(在上面的编辑中)如果你能帮忙的话。非常感谢。我们可以使用
deparse
替换它。请参阅更新的答案。
#[1] "mpg"

#      mean
#1 20.09062