我对R还是比较陌生,并且正在努力理解为什么下面的代码无法正常工作。
我正在使用nycflights13库中的flights数据集。我希望能够编写一个计算在函数参数中指定的变量平均值的函数。例如,下面的代码可以正常工作:
summarise(group_by(flights, year, month),
avg = mean(dep_delay, na.rm = TRUE))
但是,当我尝试将其放在函数中并计算arr_delay的平均值时,出现错误:
summarise_func <- function(var = dep_delay) {
summarise(group_by(flights, year, month),
avg = mean(var, na.rm = TRUE))
}
summarise_func(var = arr_delay)
均值错误(var,na.rm = TRUE):找不到对象'arr_delay'
有人可以向我解释为什么var参数(arr_delay)的值未传递给函数以及如何解决该问题吗?
我完全知道我可以编写另一段代码来计算平均arr_delay,但是我试图弄清楚R的工作原理。
谢谢
答案 0 :(得分:2)
当您将其放入函数中时,它开始变得有点复杂。阅读有关非标准评估(NSE)的信息。
现在,您可以使用curl-curly({{}}
)运算符在函数中传递未加引号的列名。
library(dplyr)
library(rlang)
library(nycflights13)
summarise_func <- function(flights, var = dep_delay) {
flights %>%
group_by(year, month) %>%
summarise(avg = mean({{var}}, na.rm = TRUE))
}
summarise_func(flights, arr_delay)
# year month avg
# <int> <int> <dbl>
# 1 2013 1 6.13
# 2 2013 2 5.61
# 3 2013 3 5.81
# 4 2013 4 11.2
# 5 2013 5 3.52
# 6 2013 6 16.5
# 7 2013 7 16.7
# 8 2013 8 6.04
# 9 2013 9 -4.02
#10 2013 10 -0.167
#11 2013 11 0.461
#12 2013 12 14.9
尝试默认选项
summarise_func(flights)
# year month avg
# <int> <int> <dbl>
# 1 2013 1 10.0
# 2 2013 2 10.8
# 3 2013 3 13.2
# 4 2013 4 13.9
# 5 2013 5 13.0
# 6 2013 6 20.8
# 7 2013 7 21.7
# 8 2013 8 12.6
# 9 2013 9 6.72
#10 2013 10 6.24
#11 2013 11 5.44
#12 2013 12 16.6