On 12-01-07 2:44 PM, cbe...@tajo.ucsd.edu wrote:
Duncan Murdoch<murdoch.dun...@gmail.com>  writes:

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()...


Duncan,

IIUC, the promise is created by bquote().

No, as Gabor said, there was no promise there. Luke Tierney tracked it down to a bug, which is now fixed in R-patched and R-devel (as of revision r58074).

Duncan Murdoch



Replacing

         eval(e[[2L]], where)
by
         {
         e[[1L]]<- as.name("force")
         eval(e)
         eval(e[[2L]], where)
          }

seems to handle this case without breaking example(bquote).


HTH,

Chuck

Duncan Murdoch



______________________________________________
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