将参数值传递给R

时间:2020-03-09 03:09:26

标签: r

我对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的工作原理。

谢谢

1 个答案:

答案 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