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

______________________________________________
R-help@r-project.org 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.

Reply via email to