lazy evaluation question
Gabor Grothendieck wrote:
Note that rm(i) for(j in 1:4) F(j) raises an error due to scoping issues.
Yes. This has nothing to do with lazy evaluation, and everything to do with scoping: f is not defined in the scope of F, so does not know about its variables (nor those in the implicit loop of lapply()). Notice also that in lapply(1:4,function(i) F(i)) it would be pretty weird if lapply would behave differently depending on the name of formal arguments of the function, i.e. if lapply(1:4,function(meep) F(meep)) gave a different result. And f() depends on looking for a variable i outside of the function.
On Sun, Jan 18, 2009 at 10:02 PM, <markleeds at verizon.net> wrote:
I've been going back to old difficult R-list "evaluation" emails that I save
in order to understand evaluation better and below still confuses me. Could
someone explain why A) works and B) doesn't. A variant of below is in the
Pat's Inferno book also but I'm still not clear on what is happening.
Thanks.
f <- function() {
# FORCING i here doesn't help
i*i
}
F <- function(i) {
force(i)
print(f())
}
A) THIS WORKS
for ( i in 1:4 ) {
F(i)
}
B) THIS DOESN'T
lapply(1:4,function(i) F(i))
O__ ---- Peter Dalgaard ?ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907