将函数名称作为字符串

Ham*_*mer 47 r function

假设我有一堆函数,每个函数都有类似MyFunction.1等等.我想将这些函数传递给另一个函数,它打印出一个小报告.理想情况下,我希望能够标记报告的各个部分,通过这些部分使用函数来生成结果.

那么有什么好方法可以将预定义函数的名称作为字符串获取吗?

小智 48

我想要同样的东西,记得library(foo)不需要引号,这就是它的作用:

package <- as.character(substitute(package))
Run Code Online (Sandbox Code Playgroud)

  • 好观察!objectName = as.character(quote(object))也可以 (5认同)

Sha*_*ane 15

另一种方法是将函数的名称传递给报表函数,然后使用该get()命令自行获取函数.例如:

function.names <- c("which","all")
fun1 <- get(function.names[1])
fun2 <- get(function.names[2])
Run Code Online (Sandbox Code Playgroud)

然后,您在原始字符向量中有名称,并且函数在您定义时具有新名称.在这种情况下,该all函数现在被称为fun2:

> fun2(c(TRUE, FALSE))
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

或者,如果您真的想保留原始函数名称,只需使用assign函数在本地分配它们:

assign(function.names[2], get(function.names[2]))
Run Code Online (Sandbox Code Playgroud)

如果你现在运行这个命令,你将最终得到你的all功能".GlobalEnv".你可以看到这个ls().

  • 并不是作者真正的问题,并且不是一个很好的解决方法。请参阅下面的match.call(fun)[2]。 (2认同)

Dir*_*tel 7

这可能会导致parse(eval(...))你对此批评持开放态度:

R> library(fortunes)
R> fortune("parse")

If the answer is parse() you should usually rethink the question.
   -- Thomas Lumley
      R-help (February 2005)

R>
Run Code Online (Sandbox Code Playgroud)

所以你的功能必须被称为MyFunction.1等等吗?


Jon*_*ang 6

您可以通过获取函数的未评估参数match.call.例如:

> x <- function(y) print(match.call()[2])
> x(lm)
lm()
Run Code Online (Sandbox Code Playgroud)