I want to use lapply and a function returning a function in order to build a
list of functions.

> genr1 <- function(k) {function() {k}}
> l1 <- lapply(1:2,genr1)
> l1[[1]]()
[1] 2

This was unexpected. I had expected the answer to be 1, since that is the
value k should be bound to when genr1 is applied to the first element of
1:2.

By itself genr1 seems to work fine.
> genr1(5)()
[1] 5

I defined a slightly different higher-order function:
> genr2 <- function(k) {k;function() {k}}
> l2 <- lapply(1:2,genr2)
> l2[[1]]()
[1] 1

This gives the answer I expected.

Now I am confused. The function returned by genr2 is exactly the same
function that was being returned by genr1. Why should evaluating k make a
difference?

I am using R 2.9.2 on Ubuntu Linux.

Jyotirmoy Bhattacharya

	[[alternative HTML version deleted]]

