[R] Putting an index explicitly into function code --- a curiosity.
Gabor Grothendieck
ggrothendieck at gmail.com
Sat Jan 7 16:38:18 CET 2012
On Sat, Jan 7, 2012 at 10:23 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
> 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()...
>
These two variations without bquote and the third which just replaces
for with while all (that I had previously posted) do work:
# 1
junk <- vector("list",4)
for(i in 1:4) {
junk[[i]] <- eval(substitute(function(x) { 42 + i * x }, list(i = i)))
}
junk
# 2
junk <- vector("list",4)
for(i in 1:4) {
junk[[i]] <- eval(parse(text = paste("function(x) { 42 +", i, "*x }")))
}
junk
# 3 - from my prior post
junk <- vector("list",4)
i <- 1
while(i <= 4) {
junk[[i]] <- eval(bquote(function(x){42 + .(i)*x}))
i <- i + 1
}
junk
--
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com
More information about the R-help
mailing list