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.