[R] from function to its name?

Bert Gunter gunter.berton at gene.com
Fri Mar 2 18:43:24 CET 2007


 Seth is, of course, correct, but perhaps the following may help:

## function that takes a function as an argument

> foo <- function(f,x)list(deparse(substitute(f)),f(x))

## Value is a list of length 2; first component is a character string giving
the "name" of the funtion; second component is the result of applying the
function to the "x" argument.

##pass in the name (UNquoted) of the function as the first argument
## This works because the evaluator looks up the function that the symbol is
bound to in the usual way

> foo(mean, 1:5)
[[1]]
[1] "mean"

[[2]]
[1] 3

## pass in an unnamed function as the first argument
> foo(function(y)sum(y)/length(y), 1:5)
[[1]]
[1] "function(y) sum(y)/length(y)"

[[2]]
[1] 3

## the following gives an error since the first argument is a character
string, not a name/symbol:

> foo(f="mean", 1:5)
Error in foo(f = "mean", 1:5) : could not find function "f"


Cheers,

Bert Gunter
Genentech Nonclinical Statistics
South San Francisco, CA 94404
650-467-7374


-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch
[mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Seth Falcon
Sent: Friday, March 02, 2007 9:18 AM
To: r-help at stat.math.ethz.ch
Subject: Re: [R] from function to its name?

"Ido M. Tamir" <tamir at imp.univie.ac.at> writes:
> I wanted to pass a vector of functions as an argument to a function to do
some 
> calculations and put the results in a list where each list entry has 
> the "name" of the function.
> I thought I could either pass a vector of function names as character,
then
> retrieve the functions etc...
> Or do the opposite, pass the functions and then retrieve the names, but
> this seems not to be possible it occurred to me, hence my question.

Functions don't have to have names, by which I mean that the
definition doesn't have to be bound to a symbol.  If your function
takes a list of functions then:

  yourFunc(theFuncs=list(function(x) x + 1))

You could force the list to have names and use them.  Or you could
force function names to be passed in (your other idea).

+ seth

______________________________________________
R-help at stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list