我想知道是否有可能在R中访问该函数之外的被调用函数的参数? 例如,如果我有以下功能:
testfunc = function(a,b,c=1,d=2){
return(list(res1 = a+b,res2 = c+d))
}
我称这个函数是这样的:
testfunc(4,5)
我想要一种方法来访问函数外部的每个参数的值,而不在函数内部添加任何东西,比如match.call等。所以,理想情况下我想要一个包装函数 getarguments(testfunc(4,5))并返回: A = 4,B = 5,C = 1,d = 2
这可能吗?非常感谢。
答案 0 :(得分:3)
我当然不会建议这样做,但理论上可行。 <怎么样
getarguments <- function(x) {
call<-substitute(x)
fx<-eval.parent(call[[1]])
body(fx) <- as.call(list(quote(`{`), quote(return(mget(ls())))))
call[[1]] <- fx
eval.parent(call)
}
getarguments(testfunc(4,5))
返回
list(a = 4, b = 5, c = 1, d = 2)
当我需要做这样的事情时,我倾向于使用debugonce(testfunc)
。然后你可以拨打testfunc(4,5)
并进入浏览器。您可以在该点打印所需的任何变量。请参阅?browser
帮助页。