有没有人知道如何编写一个函数 F ,它接受函数调用(例如,mean(x = 1:10))作为参数,并只返回被调用函数的名称(平均)?
到目前为止我的最佳尝试总结如下
(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))for(function(x) )print(x))(1)。如果您需要任何澄清,请随时发表评论。谢谢。
edit1:只是要注意,我想避免检查第一个括号并删除它之前的代码(对于“mean(x = 1:10)”将返回“mean”),因为“bad” (Fun_nAme“实际上是R中的合法函数名称。
回答问题:Josh O'Brien的答案很完美:满足上述条件的 F 功能
F <- function(x) deparse(substitute(x)[[1]])
它适用于二元运算符,标准函数和匿名函数。
答案 0 :(得分: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] "+"
答案 1 :(得分:1)
我不知道你要做什么,或者这是一个好主意,或者这是你想要的,但这里有正则表达式的重击:
FUN <- function(x1){
z <- deparse(substitute(x1))
list(fun=strsplit(z, "\\(")[[c(1, 1)]],
eval=x1)
}
FUN(mean(x = 1:10))