假设我有一堆函数,每个函数都有类似MyFunction.1等等.我想将这些函数传递给另一个函数,它打印出一个小报告.理想情况下,我希望能够标记报告的各个部分,通过这些部分使用函数来生成结果.
那么有什么好方法可以将预定义函数的名称作为字符串获取吗?
小智 48
我想要同样的东西,记得library(foo)不需要引号,这就是它的作用:
package <- as.character(substitute(package))
Run Code Online (Sandbox Code Playgroud)
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().
这可能会导致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等等吗?
您可以通过获取函数的未评估参数match.call.例如:
> x <- function(y) print(match.call()[2])
> x(lm)
lm()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28173 次 |
| 最近记录: |