如何解决将列名传递给函数
作为一个可重现的示例,这很简单:从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)`.
由reprex package(v0.3.0)于2020-09-19创建
编辑:
我还有一个后续问题。
我还需要将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
由reprex package(v0.3.0)于2020-09-19创建
解决方法
您可以使用curl-curly({{}}
)运算符将列名作为未加引号的变量传递。
要获取作为字符值传递的变量,我们可以使用deparse
,substitute
。
library(dplyr)
library(rlang)
summary_stats <- function(variable,dataframe){
print(deparse(substitute(variable)))
dataframe %>% summarise(mean = mean({{variable}}))
}
#[1] "mpg"
# mean
#1 20.09062
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。