我有一个非标准评估的简单问题:将变量名作为参数传递到函数中。
作为一个可重现的例子,这是一件简单的事情:取一个变量的平均值,mpg
来自mtcars
数据集。我的最终目标是拥有一个可以输入数据集和变量并获取平均值的函数。
所以没有函数:
library(tidyverse)
mtcars %>% summarise(mean = mean(mpg))
#> mean
#> 1 20.09062
我尝试过使用get()
对于非标准评估,但我收到错误:
library(tidyverse)
summary_stats <- function(variable, dataframe){
dataframe %>% summarise(mean = get(variable))
}
summary_stats(mpg, mtcars)
#> Error: Problem with `summarise()` input `mean`.
#> x invalid first argument
#> ℹ Input `mean` is `get(variable)`.
Created on 2020-09-19 by the reprex package (v0.3.0)
Edit:
我还有一个额外的后续问题。
我还需要variable
论证作为char
字符串,我尝试了下面的代码,但我仍然不知道如何做到这一点:
library(tidyverse)
summary_stats <- function(variable, dataframe){
dataframe %>% summarise(mean = mean({{variable}}))
print(as.character({{variable}}))
}
summary_stats(disp, mtcars)
#> Error in print(as.character({: object 'disp' not found
Created on 2020-09-19 by the reprex package (v0.3.0)