[Rd] How do you construct a function from a list?

Kurt Hornik Kurt.Hornik@ci.tuwien.ac.at
Wed, 22 Nov 2000 13:08:26 +0100

>>>>> Duncan Murdoch writes:

> I'm trying to get a data.restore function to work on functions.  One
> thing I can't figure out:  how do you construct a function from it's
> component parts?

> For example, I can construct a for loop as

> forloop <-
> as.call(list(as.name('for'),as.name('i'),1,as.call(list(as.name('junk')))))

> which results in 

>  for (i in 1) junk()

> But how do I put that in a function?  For example, I'd like the
> function

>   function()  for (i in 1) junk()

> but  as.function(list(forloop)) results in

>  function () 
>  list(for (i in 1) junk())

> which returns the for loop in a list, it doesn't execute it.  How do I
> construct the function?

> (This might be a bug in as.function, because 

>   as.function(c(alist(a=,b=2),forloop))

> returns the expected function

>  function (a, b = 2) 
>  for (i in 1) junk()

> It's just that I can't seem to find a way to do it when there are no
> arguments.)


I think the easiest approach is to do

	foo <- function() {}
	body(foo) <- forloop

Re the above, I guess Peter would know more about this but is currently
swamped with other work.  I also observe that

R> as.function(alist(forloop))
function () 
R> as.function(list(forloop))
function () 
list(for (i in 1) junk())

which does not seem right.

r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch