[R] mapply & assign to generate functions
William Dunlap
wdunlap at tibco.com
Mon Mar 12 19:09:17 CET 2012
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-bounces at r-project.org [mailto:r-help-bounces at 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 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