[R] Putting an index explicitly into function code --- a curiosity.

Duncan Murdoch murdoch.duncan at gmail.com
Sun Jan 8 13:50:59 CET 2012


On 12-01-07 2:44 PM, cberry at tajo.ucsd.edu wrote:
> Duncan Murdoch<murdoch.duncan at gmail.com>  writes:
>
>> On 12-01-06 10:21 PM, Rolf Turner wrote:
>>> On 07/01/12 15:51, R. Michael Weylandt<michael.weylandt at 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
>>
>



More information about the R-help mailing list