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.

Reply via email to