[R] Most elegant way to use formals() in building functions

Duncan Murdoch murdoch at stats.uwo.ca
Sat Jul 25 00:47:21 CEST 2009


On 24/07/2009 6:35 PM, Frank E Harrell Jr wrote:
> Dear Group:
> 
> I want to create a function having a ... argument and to have the 
> default arguments evaluated, as thus:
> 
> g <- function(a, b, ...) a+b
> formals(g) <- alist(a=,b=2+3,...=)
> g
> function (a, b = 2 + 3, ...)
> a + b
> 
> But I want the default argument for b to be evaluated as 5.  How can 
> this be done?  Note: My real need is for a more complex expression to be 
> evaluated for the default value of an argument.
> 
> I can use formals(g) <- list(a=NULL, b=2+3, ...=NULL) but then list(...) 
> doesn't behave properly in the function.

Not sure if it's "most elegant", but I think this works:

formals(g) <- eval(substitute(alist(a=,b=default,...=),
                    list(default=2+3)))

Duncan Murdoch




More information about the R-help mailing list