Skip to content

modify "..." (optional args)

2 messages · Pascal A. Niklaus, Duncan Murdoch

#
Hi all,

Is there a way to modify the optional arguments (...) passed to a 
function, so that these can be passed in modified form to a subsequent 
function call? I checked "Programming with Data" but could not find a 
solution there.

What I'd like is something along these lines:

test <- function(x,y,...) {
   if(!hasArg(xlab)) { ___add xlab to ...___ }
   if(hasArg(xlab)) { ___remove xlab from ...___ }  # alternative

   plot(x,y,...)
}

Of course, I could use separate calls, like

if(hasArg(xlab)) plot(x,y,...) else plot(x,y,xlab="label",...)

but this gets complicated if there is more than one such case to consider.

Thanks

Pascal
#
On 11-10-07 4:39 AM, Pascal A. Niklaus wrote:
Not as such, but you get the same result using do.call.  For example:

test <- function(x, y, ...) {
   args <- list(x=x, y=y, ...)
   if (!hasArg(xlab)) args <- c(args, list(xlab="My label"))
   do.call(plot, args)
}

This has a disadvantage that the argument to plot has already been 
evaluated, so the y label shows the value rather than the expression 
test() received for y.  Presumably you can construct a call and evaluate 
it to get the labels you want; the tools are quote(), bquote(), 
substitute(), etc.

Duncan Murdoch