我正在尝试了解有关dplyr
编程和非标准评估的新实现。所以verb_函数被enquo
参数替换,然后应用!!
在常规动词函数中。从select
旧到新的工作正常,以下函数给出了类似的结果:
select_old <- function(x, ...) {
vars <- as.character(match.call())[-(1:2)]
x %>% select(vars)
}
select_new <- function(x, ...) {
vars <- as.character(match.call())[-(1:2)]
vars_enq <- enquo(vars)
x %>% select(!!vars_enq)
}
但是,当我尝试使用arrange
新的编程风格时,我会得到一个错误:
arrange_old <- function(x, ...) {
vars <- as.character(match.call())[-(1:2)]
x %>% arrange_(vars)
}
arrange_new <- function(x, ...){
vars <- as.character(match.call())[-(1:2)]
vars_enq <- enquo(vars)
x %>% arrange(!!vars_enq)
}
mtcars %>% arrange_new(cyl)
# Error in arrange_impl(.data, dots) :
# incorrect size (1) at position 1, expecting : 32
32 显然是 的行数mtcars
, 的内部函数dplyr
显然需要这个长度的向量。我的问题是为什么新的编程风格不适用arrange
以及如何以新的风格进行翻译。