假设我有一个简单的函数:
my_c <- function(x = 1, y = 2, z = 3) {
c(x, y, z)
}
现在我想创建另一个函数来封装
my_c
,并使我能够:
- 选择要更改的函数参数
- 提供一个值列表给该参数
vary_my_c
的期望输出:vary_my_c(vary = "y", values = list(10, 11))
[[1]]
[1] 1 10 3
[[2]]
[1] 1 11 3
我的尝试是去解析一个表达式,但是并不成功:
library(tidyverse)
vary_my_c <- function(vary, values, ...) {
values %>% map(function(param) {
my_c(eval(parse(text = str_c(vary, "= param"))))
})
}
# or equivalently with syntactic sugar:
vary_my_c <- function(vary, values, ...) {
values %>% map(~ my_c(eval(parse(text = str_c(vary, "= .x")))))
}
# gives:
[[1]]
[1] 10 2 3
[[2]]
[1] 11 2 3
我在想这个解决方案是否涉及到rlang :: enquo()
和!!
,而不是eval(parse(text = text))
,但我对准引用不够熟悉,无法弄清楚如何进行测试。