我试图理解rlang包中解释的非标准评估。考虑到这个目标,我的问题是:
如何编写
dplyr::select.list()
符合整洁评估原则的函数?
这是我当前如何编写包装器的示例dplyr::select()
:
select_wrapper <- function(x, ...) {
vars <- rlang::quos(...)
dplyr::select(x, !!!vars)
}
Run Code Online (Sandbox Code Playgroud)
适用于数据框,例如,
> select_wrapper(mtcars, cyl, mpg)
> ## cyl mpg
> ## Mazda RX4 6 21.0
> ## Mazda RX4 Wag 6 21.0
> ## Datsun 710 4 22.8
> ## Hornet 4 Drive 6 21.4
> ## Hornet Sportabout 8 18.7
> ## Valiant 6 18.1
Run Code Online (Sandbox Code Playgroud)
但不在列表中:
attr(mtcars, "test") <- "asdf"
mtcars_list <- attributes(mtcars)
select_wrapper(mtcars_list, row.names, test)
> ## 1: …
Run Code Online (Sandbox Code Playgroud)