【问题标题】:extracting a function call name from a function call从函数调用中提取函数调用名称
【发布时间】:2012-08-28 12:02:56
【问题描述】:

有谁知道如何编写一个函数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 ) 打印 (x))(1)。如果您需要任何澄清,请随时发表评论。谢谢。

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

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

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

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

【问题讨论】:

    标签: r function call


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这是一个简单的函数,可以满足您的需求:

      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] "+"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 1970-01-01
        • 2019-06-20
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多