在下面的示例中,为什么我们应该更喜欢使用
为什么我们应该更喜欢使用
f1
而不是f2
?在某种意义上,它是否更有效率?对于习惯于基础R的人来说,使用“substitute + eval”选项似乎更自然。为什么我们应该更喜欢使用
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
换句话说,在这个特定的例子之外,我的问题是:我能否使用旧版R中的substitute+eval
来编程,并使用dplyr
NSE函数,还是我真的需要学会喜欢那些 rlang
函数,因为它有好处(速度、清晰度、组合性等)?
dplyr::
的人能够允许我们传递变量名称作为字符字符串,就像旧的带下划线的变体mutate_()
一样,我认为世界会变得更美好。在我看来,一个更好的选择是在mutate()
等函数中增加一个类似于colnames_as_strings=TRUE
的参数... 这将使得在交互式和软件中使用 dplyr 变得简单明了。但在那之前,欢迎来到enquo()
/!!
地狱... - lefft