[R] Putting an index explicitly into function code --- a curiosity.
cberry at tajo.ucsd.edu
cberry at tajo.ucsd.edu
Sat Jan 7 20:44:07 CET 2012
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().
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
>
--
Charles C. Berry Dept of Family/Preventive Medicine
cberry at ucsd edu UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901
More information about the R-help
mailing list