我想将对象met
向下传递给函数sf
但是找不到对象错误。我认为它可能与top函数调用的环境有关,它没有传递给子函数:
f <- function(fname,x,met=c('sum','subs')){
.env <- environment() ## identify the environment
do.call(fname,list(x,met),envir=.env)
}
sf <- function(x,...){
if (met== 'sum') x + 100 else x - 100
}
f('sf',1:10,met='sum')
答案 0 :(得分:4)
met
如果未sf
明确作为sf
的参数传递,则sf <- function(x, met, ...) {
if (met == 'sum') x + 100 else x - 100
}
正文中的名称无法引用,请尝试以下操作:
met
如果我们假设...
是调用sf
时sf <- function(x, ...) {
met <- list(...)[[1]]
if (met == 'sum') x + 100 else x - 100
}
的第一个组成部分(问题示例中的情况),那么这也适用:
sf <- function(x, ...) {
met <- ...[[1]]
if (met == 'sum') x + 100 else x - 100
}
这个更简洁的替代方案也有效:
sf <- function(x, ...) {
met <- ..1
if (met == 'sum') x + 100 else x - 100
}
更简洁的是这个替代方案:
env
我们在这里do.call
并不需要{{1}}参数。
更新:更正。