[R] mapply & assign to generate functions
J Toll
jctoll at gmail.com
Mon Mar 12 19:16:07 CET 2012
Bill and Brian,
Thank you both for the finding my error. force() appears to do the trick.
Thanks again,
James
On Mon, Mar 12, 2012 at 1:09 PM, William Dunlap <wdunlap at tibco.com> wrote:
> 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
More information about the R-help
mailing list