[R] Creating a list of functions

Duncan Murdoch murdoch at stats.uwo.ca
Thu Jun 5 17:20:40 CEST 2008


On 6/5/2008 10:50 AM, Andreas Posch wrote:
> I've been trying to create a list of function where function[[i]] should actually return the value of i.
> 
> trying:
> 
> func <- vector("list",2)
> i <- 1
> while (i <= 2)
> {
> func[[i]] <- function()
> {
> i
> }
> i <- i+1
> }
> 
> however only returned the last value of i for each function. Any help how to achieve the solution intended would be greatly appreciated.
> 
> thanks in advance,
> 
> andreas posch

The problem is that the function definition

function() { i }

has no local variable i, so it looks in the enclosing environment for 
one, and they all find the same one.  The usual way to do what you want 
is to create a builder function, like this:

builder <- function(i) {
   return( function() i )
}

When the anonymous function looks for i, it will find the local one in 
the builder.  Each call to the builder will create a different local 
value of i.

So then your loop would be

while (i <= 2) {
   func[[i]] <- builder(i)
   i <- i + 1
}

I hope this helps.

Duncan Murdoch



More information about the R-help mailing list