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

时间:2018-10-05 10:04:27

标签: r dplyr tidyverse tidyeval

我试图了解tidyeval,并遇到了莱昂内尔·亨利(Lionel Henry)的tutorial。我还阅读了dplyr的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).

1 个答案:

答案 0 :(得分:0)

它们在功能上是等效的。如果您不修改点中的参数(更改其名称,将函数包装在参数周围,...),则最好直接传递...,因为它更简洁易读。

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