On Fri, Jan 6, 2012 at 9:43 PM, Rolf Turner <rolf.tur...@xtra.co.nz> wrote: > > I want to create a list of functions in a for loop, with the index > of the loop appearing explicitly in the function code. > > After quite a bit of thrashing around I figured out how to do it. > > Here is a toy example: > > junk <- vector("list",4) > for(i in 1:4) { > itmp <- i > junk[[i]] <- eval(bquote(function(x){42 + .(itmp)*x})) > } > > So I'm *basically* happy, but there's something I don't understand: > Why do I need "itmp"? > > That is, if I do > > junk <- vector("list",4) > for(i in 1:4) { > junk[[i]] <- eval(bquote(function(x){42 + .(i)*x})) > } > > then every entry of "junk" is equal to > > function (x) > { > 42 + 4L * x > } > > i.e. I seem to get the *last* value of the index always substituted, rather > than > the "current" value. Something (subtle?) is going on that I don't > understand. > And than makes me feel not quite comfy. Can anyone enlighten me?
This seems quite strange. For example, if we replace the for with a while then we don't need to force i: junk <- vector("list",4) i <- 1 while(i <= 4) { junk[[i]] <- eval(bquote(function(x){42 + .(i)*x})) i <- i + 1 } junk I am using: > R.version.string [1] "R version 2.14.1 Patched (2011-12-26 r58001)" > win.version() [1] "Windows Vista (build 6002) Service Pack 2" -- 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.