如何在R中访问该函数之外的被调用函数的参数?

时间:2017-06-21 15:45:02

标签: r function arguments

我想知道是否有可能在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

这可能吗?非常感谢。

1 个答案:

答案 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帮助页。