sayan dasgupta wrote:
Hey guys,

I have a doubt here , It is something simple I guess, what am I missing out
here ??


f <- function(y) function() y
tmp <- vector("list", 5)
for (i in 1:5) tmp[[i]] <- f(i)
tmp[[1]]() # returns 5;

z <- f(6)
tmp[[1]]() # still returns 5; it should return 6 "ideally" right ???

No, each time you call f you create a new y variable in its local evaluation frame. So all 6 of your y variables are different. However, the first 5 of them are all defined by the same expression, i.e. "i". Thus the first time they are evaluated they will each get the current value of that variable. After the first evaluation, the value will be fixed, because that is when the value of y is forced. So for example,

> f <- function(y) function() y
> tmp <- vector("list", 5)
> for (i in 1:5) tmp[[i]] <- f(i)
> tmp[[1]]() # returns 5;
[1] 5
>
> i <- 10
> tmp[[2]]()
[1] 10
> tmp[[1]]()
[1] 5

Even if  I dont evaluate the function tmp[[1]] before i.e I do
rm(list=ls())
f <- function(y) function() y
tmp <- vector("list", 5)
for (i in 1:5) tmp[[i]] <- f(i)
 z <- f(6)
tmp[[1]]() # it still returns 5; it should return 6 "ideally" right ???

See above.

Duncan Murdoch
        [[alternative HTML version deleted]]

______________________________________________
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.


______________________________________________
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