我试图了解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).
答案 0 :(得分:0)
它们在功能上是等效的。如果您不修改点中的参数(更改其名称,将函数包装在参数周围,...),则最好直接传递...
,因为它更简洁易读。
整洁的评估手册的这一部分探讨了以下问题:https://tidyeval.tidyverse.org/multiple.html