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

David Winsemius dwinsemius at comcast.net
Sat Jan 7 04:14:25 CET 2012


On Jan 6, 2012, at 9:51 PM, 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.

Your theory passes the experimental test:

for(i in 1:4) {force(i)
     junk[[i]] <- eval(bquote(function(x){42 + .(i)*x}))}
  junk


-- 
David.
>
> Michael
>
> On Jan 6, 2012, at 8:43 PM, Rolf Turner <rolf.turner at 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 at 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 at 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.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list