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,  <markle...@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.dalga...@biostat.ku.dk)              FAX: (+45) 35327907

______________________________________________
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