字符向量到省略号输入
Character vector to ellipsis input
我有以下函数,它采用未加引号的输入和 returns 输入对象的字符向量。
my_function <- function(...) {
v_chr <- purrr::map_chr(rlang::enexprs(...), rlang::as_name)
v_chr
}
my_function(apple, orange)
"apple" "orange"
我正在尝试围绕它构建一个接受字符向量输入的包装器。这不起作用。
my_wrapper <- function(v_chr) {
x <- rlang::syms(v_chr)
my_function(x)
}
v_chr <- c("apple", "orange")
my_wrapper(v_chr)
"x"
问题
- 如何让
my_wrapper()
到 return 与 my_function()
相同的输出?
- 奖金:是否有更简化的方法来实现
my_function()
中的结果?
我希望使用 rlang
的解决方案,但不介意另外查看基本解决方案。
你的包装应该看起来像
my_wrapper <- function(v_chr) {
x <- rlang::syms(v_chr)
rlang::eval_tidy(my_function(!!!x))
}
您需要使用 bang-bang-bang 运算符将这些符号注入到调用中,然后使用 eval_tidy
对其求值,因为 "normal" R 函数无法识别 !!!
。
我有以下函数,它采用未加引号的输入和 returns 输入对象的字符向量。
my_function <- function(...) {
v_chr <- purrr::map_chr(rlang::enexprs(...), rlang::as_name)
v_chr
}
my_function(apple, orange)
"apple" "orange"
我正在尝试围绕它构建一个接受字符向量输入的包装器。这不起作用。
my_wrapper <- function(v_chr) {
x <- rlang::syms(v_chr)
my_function(x)
}
v_chr <- c("apple", "orange")
my_wrapper(v_chr)
"x"
问题
- 如何让
my_wrapper()
到 return 与my_function()
相同的输出? - 奖金:是否有更简化的方法来实现
my_function()
中的结果?
我希望使用 rlang
的解决方案,但不介意另外查看基本解决方案。
你的包装应该看起来像
my_wrapper <- function(v_chr) {
x <- rlang::syms(v_chr)
rlang::eval_tidy(my_function(!!!x))
}
您需要使用 bang-bang-bang 运算符将这些符号注入到调用中,然后使用 eval_tidy
对其求值,因为 "normal" R 函数无法识别 !!!
。