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.<obsessiv...@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@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@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.

Reply via email to