I think that adding a force(i) to your inner function should fix things up. > z <- mapply(assign, + c("half", "third", "quarter"), + lapply(2:4, function(i) { + force(i) + function(x) divide(x, i)}), + pos = 1) > half(10) [1] 5 > third(10) [1] 3.333333 > quarter(10) [1] 2.5
Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf > Of J Toll > Sent: Monday, March 12, 2012 10:47 AM > To: r-help > Subject: [R] mapply & assign to generate functions > > Hi, > > I have a problem that I'm finding a bit tricky. I'm trying to use > mapply and assign to generate curried functions. For example, if I > have the function divide > > divide <- function(x, y) { > x / y > } > > And I want the end result to be functionally equivalent to: > half <- function(x) divide(x, 2) > third <- function(x) divide(x, 3) > quarter <- function(x) divide(x, 4) > > But I want to do it using mapply and assign: > mapply(assign, > c("half", "third", "quarter"), > lapply(2:4, function(i) {function(x) divide(x, i)}), > pos = 1) > > The problem is in the third line. I end up with 3 functions that are > all functionally equivalent to quarter(). Any suggestions on how to > get this to work properly. > > Thanks. > > > James > > ______________________________________________ > 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.