[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