On Sat, Jan 7, 2012 at 10:23 AM, Duncan Murdoch <murdoch.dun...@gmail.com> wrote: > On 12-01-06 10:21 PM, Rolf Turner wrote: >> >> On 07/01/12 15:51, R. Michael Weylandt<michael.weyla...@gmail.com> wrote: >>> >>> I imagine the answer will involve lazy evaluation and require you use >>> force() but I'm not quite qualified to pronounce and not at a computer to >>> test. >> >> >> I think you've got it; I tried >> >> junk<- vector("list",4) >> for(i in 1:4) { >> junk[[i]]<- eval(bquote(function(x){42 + .(force(i))*x})) >> } >> >> and got the result that I wanted. Still don't completely understand, but >> it at least makes vague sense and makes me a bit more comfy. > > > I'm not so sure. The index in a for loop isn't supposed to be a promise. > To me, it looks like a bug, maybe in bquote()... >
These two variations without bquote and the third which just replaces for with while all (that I had previously posted) do work: # 1 junk <- vector("list",4) for(i in 1:4) { junk[[i]] <- eval(substitute(function(x) { 42 + i * x }, list(i = i))) } junk # 2 junk <- vector("list",4) for(i in 1:4) { junk[[i]] <- eval(parse(text = paste("function(x) { 42 +", i, "*x }"))) } junk # 3 - from my prior post junk <- vector("list",4) i <- 1 while(i <= 4) { junk[[i]] <- eval(bquote(function(x){42 + .(i)*x})) i <- i + 1 } junk -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com ______________________________________________ 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.