2017-06-21 121 views
1

我想知道是否有可能在R中访问该函数之外的被调用函数的参数? 例如,如果我有以下功能:如何在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

你能解释一下为什么你要这样做吗? – Dason

+0

我想要一个简单的方法来为调试目的全局定义函数参数。 –

+1

我还没有完全理解你想要做什么。但是,如果你能够更详细地解释这个问题,似乎可能有更好的方法来实现你的实际目标。 – Dason

回答

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

+0

我喜欢这个答案,因为它可以解决问题中的问题。但是我认为,从他们在评论中描述的内容来看,他们通过学习“调试”和“浏览器”会更好。 – Dason

+0

@Dason我也添加了这个信息。我同意这很重要。 – MrFlick

+0

非常感谢Dason和MrFlick的帮助。这正是我想要做的。我也研究过调试和浏览器,它们看起来也很有用。干杯。 –

相关问题