只需让您的函数在调用环境中计算参数。这似乎有效(注意
envir=parent.frame()
).
fun1 <- function(x = "How old", y = "is", z = "the car") {
args_used <- as.list(match.call()[-1])
do.call(fun2, args_used, envir=parent.frame())
}
但我不明白你为什么在这里使用惰性评估。您只需捕获作为环境一部分的所有片段并传递它们的值
fun1 <- function(x = "How old", y = "is", z = "the car") {
args_used <- as.list(environment())
# if you need ...: args_used <- c(as.list(environment()), list(...))
do.call(fun2, args_used)
}
请注意
environment()
将捕获在调用时存在的所有变量。因此,如果您只希望将变量传递给函数,请确保在函数的开头调用它。
如果参数的名称中有前导点,R通常将其视为“隐藏”,因此需要设置
all.names=TRUE
参数到
as.list.environment
函数来获取它们。你可以的
args_used <- as.list(environment(), all.names=TRUE)