(命名)函数可以内省调用它的名称吗?

kjo*_*kjo 2 r introspection

假设一个函数已绑定到多个名称(每个名称都在不同的绑定环境中).有没有办法让它找出哪些名称(如果有的话)被用来调用它?

一个简单的例子:

original.name <- function () cat("don't know my name (yet)...\n")
call.thunk <- function (thunk) thunk()
foo <- original.name

foo()
## don't know my name (yet)...
call.thunk(original.name)
## don't know my name (yet)...
Run Code Online (Sandbox Code Playgroud)

在上面的第一个调用中,使用名称调用函数foo; 在第二个中,它被称为名称thunk.是否可以修改函数的主体以便确定此信息?


(这个问题的动机是想要更多地了解R中的内省;我不是要解决任何具体问题.)

G. *_*eck 6

试试sys.call:

g <- f <- function() sys.call()[[1]]
f()
## f
Run Code Online (Sandbox Code Playgroud)

注意:

  • 这会返回一个类的对象"name".要将名称作为字符串使用as.character(sys.call()[[1]]).

  • match.call()[[1]] 也可以作为身体