【问题标题】:Getting the name of a function获取函数名
【发布时间】:2012-05-15 13:32:52
【问题描述】:

希望这不是太简单。我正在寻找一个函数,它给我一个函数的名称,我将它分配给一个变量。所以像

x <- mean
the_function_i_look_for(x)
[1] "mean"

有什么想法吗?非常感谢!

编辑:

好的,这是一个更详细的示例:实际上我有一个函数,我传递一个任意对数并返回一个 data.frame。数据框的一列名称应指明使用的对数。

> myFunction <- function( log, x ) {
    df <- data.frame( x, log(x))
    names(df) <- c(the_function_i_look_for(log), "x")
    return(df)
  }
> myFunction( log10, c(10,100,1000) )
>   log10    x
  1     1   10
  2     2  100
  3     3 1000

【问题讨论】:

  • 你到底想做什么?根据您打算对 x 做什么,有不同的方法。您可能只想将函数名称存储为字符串,例如
  • 该函数(您使用示例mean)是您的函数的参数吗?我认为如果你真的添加了一些代码来展示你是如何使用它的,那将是最好的。
  • methods(x) 会告诉您是否为此函数定义了任何方法。如果为真,您将看到函数名称,后跟方法。现在想出一个没有定义方法的函数的解决方案...... :)
  • @sgibb 抱歉,不是。

标签: r


【解决方案1】:

你可以使用?substitute:

myFunction <- function( log, x ) {
    df <- data.frame( x, log(x))
    names(df) <- c("x", substitute(log))
    return(df)
}

myFunction( log10, c(10,100,1000) )
#     x log10
#1   10     1
#2  100     2
#3 1000     3

编辑: 似乎也适用于 ReferenceClasses:

foo <- setRefClass("foo",
    methods = list(
    bar = function(x) {
        message("function: ", substitute(x))
    }
))

f <- foo$new()
f$bar(log)
# function: log
f$bar(mean)
# function: mean

【讨论】:

  • 也许,我接受这个答案有点太快了,必须承认,我不知道 R 在这方面有多复杂。 myFunction其实不仅仅是一个函数,而是一个ReferenceClass的方法。使用substitute(不指定环境)的解决方案似乎在那里不起作用。
  • 好吧,你能编辑你的问题给我们一个可重复的例子吗? (PS,只是好奇:这个任务easy是用什么语言编写的?)
  • @Isam 您的最后评论不清楚,但也许 deparse(substitute(f)) 而不是 substitution(f) 是您正在寻找的方式
  • @sgibb 真的很抱歉,但一定有其他原因导致它不起作用。不过,现在一切都很好!再次感谢。
  • @BenBolker 我对许多编程语言的经验并不丰富。但是,例如在 Java 中使用反射不仅会更直接,而且使用起来也更加一致。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多