[R] partial evaluation of a function with several arguments

Gabor Grothendieck ggrothendieck at gmail.com
Tue Feb 8 14:15:57 CET 2011


On Mon, Feb 7, 2011 at 11:33 PM, Martin Spindler <Martin.Spindler at gmx.de> wrote:
> Dear all,
>
> I have the following problem:
>
> add <- function(x,y) {x+y}
>
> What is the easiest / most elegant way to create a new function (e.g. with the name "addev") that sets the second argument of the function "add" to a fixed value (e.g. y=3), i.e. addev <- add(x,3). But this does not work.
>
> Thank you for your efforts in advance!
>

The Defaults package can do that:

> library(Defaults)
>
> add <- function(x,y) {x+y}
> setDefaults(add, y=3)
>
> add(1)
[1] 4

We can look at what has happened to add.  Functions have a source
attribute that show the source text of the function but that text is
not changed by setDefaults so we need to remove it to be sure we are
looking at the actual function and not the source text:

> attr(add, "source") <- NULL
> add
function (x, y)
{
    if (exists(".importDefaults"))
        .importDefaults(calling.fun = "add")
    x + y
}
>

-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-help mailing list