首页 > 解决方案 > 在 r 中用宏(函数)总结时找不到对象

问题描述

我正在尝试使用functionand制作宏dplyr

我想要做的是summarise特定的变量。中function,变量为i。年龄在dataset

fun<-function(i){
dataset%>%dplyr::summarise(t1=mean(i),t2=sd(i))
}
fun(i=age)

当我没有执行summarisefunction,它起作用了。但是,function出现了错误。

 Error in .f(.x[[i]], ...) : object 'age' not found 

任何人都可以帮我知道是什么问题吗?

标签: rfunctiondplyr

解决方案


我们可以使用{{}}运算符来评估传递给函数的不带引号的列名

library(dplyr)
library(rlang)
fun<-function(datasset, i){
   dataset%>%
        dplyr::summarise(t1=mean({{i}}),
                         t2=sd({{i}})
 }
fun(dataset, age)

或者另一种选择是使用enquo和评估 ( !!)

fun<-function(dataset, i){
   i <- enquo(i)
   dataset%>%
        dplyr::summarise(t1=mean(!!i),
                         t2=sd(!!i))
 }
fun(dataset, age)

注意:最好将数据对象和参数传递给函数


推荐阅读