使用 tidyeval 传递多个参数 - 不同的方法?

Passing multiple arguments with tidyeval - different methods?

我正在尝试理解 tidyeval 并遇到了来自 dplyr 的 tutorial from Lionel Henry. I've also read the vignette。他们描述了传递多个参数的不同方法,例如使用 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).

它们在功能上是等价的。如果您不修改点中的参数(更改它们的名称、围绕参数包装函数,...),最好直接传递 ...,因为它更简洁和可读。

整洁的评估手册的这一部分探讨了这些问题:https://tidyeval.tidyverse.org/multiple.html