6

有谁知道如何编写一个函数F,它将函数调用(例如,mean(x = 1:10))作为参数,并仅返回被调用函数的名称(mean)?

到目前为止,我的最佳尝试总结如下

(function(x1){

    return(deparse(substitute(x1)))

})(mean(x = 1:10))
### 'mean(x = 1:10)' 

在反解析之前将 x1 (函数调用)更改为表达式似乎没有多大帮助:返回

(function(x1){

    return(deparse(as.expression(substitute(x1))))

})(mean(x = 1:10))
# "expression(mean(x = 1:10))"

如果可能的话,我也希望能够使用匿名函数作为参数,所以F应该为 (function(x) print (x))(1) 返回 (function(x) print (x))。如果您需要任何澄清,请随时发表评论。谢谢。

编辑1:请注意,我想避免检查第一个括号并删除它之前的代码(对于“mean(x = 1:10)”将返回“mean”),作为“bad(Fun_nAme”实际上是 R 中的合法函数名。

已回答的问题: Josh O'Brien 的回答很完美:满足上述条件的函数F

F <- function(x) deparse(substitute(x)[[1]])

它适用于二元运算符、标准函数和匿名函数。

4

2 回答 2

8

这是一个简单的功能,可以满足您的要求:

F <- function(x) deparse(substitute(x)[[1]])

F(mean(x=1:10))
# [1] "mean"

F((function(x) print (x))(1))
# [1] "(function(x) print(x))"

F(9+7)
# [1] "+"
于 2012-09-03T20:15:19.687 回答
1

我不知道您要做什么,或者这是否是一个好主意,或者这是否是您想要的,但这里有一个正则表达式:

FUN <- function(x1){
    z <- deparse(substitute(x1))
    list(fun=strsplit(z, "\\(")[[c(1, 1)]],
    eval=x1)
}

FUN(mean(x = 1:10))
于 2012-09-03T19:41:11.703 回答