在下面的例子中,我们为什么要赞成使用f1过f2?从某种意义上说它更有效吗?对于习惯使用R的人来说,使用"substitute + eval"选项似乎更自然.
library(dplyr)
d = data.frame(x = 1:5,
y = rnorm(5))
# using enquo + !!
f1 = function(mydata, myvar) {
m = enquo(myvar)
mydata %>%
mutate(two_y = 2 * !!m)
}
# using substitute + eval
f2 = function(mydata, myvar) {
m = substitute(myvar)
mydata %>%
mutate(two_y = 2 * eval(m))
}
all.equal(d %>% f1(y), d %>% f2(y)) # TRUE
Run Code Online (Sandbox Code Playgroud)
换句话说,除了这个特殊的例子之外,我的问题是:我可以使用dplyr具有良好的基础R的替代+ eval的NSE函数编程,或者我真的需要学会喜欢所有这些rlang函数,因为有它的好处(速度,清晰度,组合性......)?