Передача значения параметра в простую функцию в R - PullRequest
0 голосов
/ 09 марта 2020

Я относительно новичок в R и пытаюсь понять, почему мой код ниже не работает.

Я использую набор данных рейсов в библиотеке nycflights13. Я хочу иметь возможность написать функцию, которая вычисляет среднее значение переменной, которую я указываю в параметре функции. Например, приведенный ниже код работает нормально:

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 Ответ

2 голосов
/ 09 марта 2020

Когда вы помещаете вещи в функции, это становится немного сложнее. Читайте о нестандартной оценке (NSE).

На данный момент вы можете использовать оператор curly-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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...