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.
Michael On Jan 6, 2012, at 8: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? > > Ta. > > cheers, > > Rolf Turner > > P. S. Also: Is there a *better* way of accomplishing my objective than what > I came up with? > > R. T. > > ______________________________________________ > 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.