如何从调用对象获取函数对象

时间:2020-07-25 10:03:00

标签: r pryr

我正在尝试从调用对象中检索功能对象 在这个例子中

ff = function(x) {gg(x)}     
gg = function(y) {uu(y)}     
uu = function(z) {browser()} 
ff(1)                        

说我想从ff获得函数sys.calls()[[1]],但下面却得到了ff函数对象,我该如何获得它

Browse[1]> deparse(sys.calls()[[1]][1])
[1] "ff()"                             

2 个答案:

答案 0 :(得分:3)

您可以通过将调用转换为列表并将其第一个成员子集设置为符号ff来提取符号。然后,您可以eval这个符号来显示函数体(或使用它来建立新的调用)

Browse[1]> eval(as.list(sys.calls()[[1]])[[1]])
#> function(x) {gg(x)}

答案 1 :(得分:2)

我们还可以在get之后使用deparse

Browse[1]> get(deparse(as.list(sys.calls()[[1]][1])[[1]]))
#function(x) {gg(x)}