[R] list of closures

Philippe Grosjean phgrosjean at sciviews.org
Thu Aug 26 06:51:50 CEST 2010


Unless for learning R, you should really consider R.oo or proto packages 
that may be more convenient for you (but you don't provide enough 
context to tell).
Best,

Philippe

On 26/08/10 06:28, Gabor Grothendieck wrote:
> On Thu, Aug 26, 2010 at 12:04 AM, Stephen T.<obsessively at hotmail.com>  wrote:
>>
>> Hi, I wanted to create a list of closures. When I use Map(), mapply(), lapply(), etc., to create this list, it appears that the wrong arguments are being passed to the main function. For example:
>> Main function:
>>> adder<- function(x) function(y) x + y
>> Creating list of closures with Map():
>>> plus<- Map(adder,c(one=1,two=2))>  plus$one(1)[1] 3>  plus$two(1)[1] 3
>> Examining what value was bound to "x":
>>> Map(function(fn) get("x",environment(fn)),plus)$one[1] 2$two[1] 2
>>
>> This is what I had expected:
>>> plus<- list(one=adder(1),two=adder(2))>  plus$one(1)[1] 2>  plus$two(1)[1] 3
>>> Map(function(fn) get("x",environment(fn)),plus)$one[1] 1$two[1] 2
>>
>> Anyone know what's going on? Thanks much!
>
> R uses lazy evaluation of function arguments.  Try forcing x:
>
>> adder<- function(x) { force(x); function(y) x + y }
>> plus<- Map(adder,c(one=1,two=2))
>> plus$one(1)
> [1] 2
>> plus$two(1)
> [1] 3
>
> ______________________________________________
> 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.
>
>



More information about the R-help mailing list