我想将字符串(重新)集成到表达式中,如下例所示:
library(rlang)
library(tidyverse)
library(stringr)
d <- tibble(a = sample(LETTERS[1:4], 10, replace = TRUE),
b = sample(letters[6:7], 10, replace = TRUE),
x = rnorm(10, 100, 20))
want <- function(d, ...) {
d <- ensym(d)
vars <- ensyms(...)
vars <- map_chr(vars, as_string)
vars <- str_c(vars, collapse = ", ")
# next step: integrate string into expression:
my_expr <- expr(select(!!d, parse_exprs(vars))) # how to rectify this line?
expr_print(my_expr)
# is: select(d, parse_exprs(vars))
# should be: select(d, a, x)
eval(my_expr)
}
want(d, a, x)
我也想避免使用.vars
,因为这仅适用于dplyr。
not_want <- function(d, ...) {
vars <- ensyms(...)
select(d, .vars = map_chr(vars, as_string)) # I would like to avoid .vars!!
}
not_want(d, a, x)
我该如何将功能设置为正确?