Передача нескольких аргументов с помощью tidyeval - разные методы? - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь понять tidyeval и наткнулся на учебник от Лайонела Генри.Я также прочитал виньетка от dplyr.Они описывают различные методы передачи нескольких аргументов, например, при использовании group_by.

В чем разница между двумя примерами ниже?Проще говоря (если это возможно): какой из них мне следует использовать и почему?

library(dplyr)

mean_by <- function(data, var, ...) {
  var <- enquo(var)

  data %>% 
    group_by(...) %>% 
    summarise(avg = mean(!! var))
}

mean_by2 <- function(data, var, ...) {
  var <- enquo(var)
  group <- quos(...)

  data %>% 
    group_by(!!! group) %>% 
    summarise(avg = mean(!! var))
}

all_equal(mean_by(starwars, height, species, eye_color),
          mean_by2(starwars, height, species, eye_color))
#> [1] TRUE


Created on 2018-10-05 by the [reprex
package](http://reprex.tidyverse.org) (v0.2.0).

1 Ответ

0 голосов
/ 05 октября 2018

Они функционально эквивалентны.Если вы не изменяете аргументы в точках (изменяя их имена, оборачивая функцию вокруг аргументов, ...), лучше передать ... напрямую, так как она более краткая и удобочитаемая.

В этом разделе аккуратной электронной книги рассматриваются следующие проблемы: https://tidyeval.tidyverse.org/multiple.html

...