2012-05-15 136 views
1

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

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 
+2

什么是你真正想干什么?根据你打算用你的'x'做什么,有不同的方法。您可能只想将函数名称存储为字符串,例如 –

+1

是函数的参数(您使用“mean”示例)函数的参数?我认为如果你真的添加了一些代码来显示如何使用它,那将是最好的。 –

+0

'方法(x)'会告诉你,如果你有任何为这个函数定义的方法。如果为true,则会看到函数名称,后面跟着一个方法。现在想出一个解决方案的功能没有定义的方法... :) –

回答

3

你可以使用?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 
+0

就是这样,谢谢! – Beasterfield

+0

也许,我接受这个答案有点太快,并且必须承认,我不知道R在这方面有多复杂。 'myFunction'实际上不只是一个函数,而是一个ReferenceClass的方法。使用'substitute'(不指定环境)的解决方案似乎并不适用。 – Beasterfield

+1

好吧,你能编辑你的问题给我们一个可重复的例子吗? (PS,只是好奇:在这种任务* easy *?) –