[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