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

How can I get the function object from a call object

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

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

说我想从 sys.calls()[[1]] 得到函数 ff 我得到了下面的但是我想要 ff 函数对象,我怎样才能得到它

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

您可以通过将调用转换为列表并对其第一个成员(即符号 ff 进行子集化)来提取符号。然后你可以 eval 这个符号来显示函数体(或者用它来构建一个新的调用)

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

我们也可以在 deparseing

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