On 11-10-07 4:39 AM, Pascal A. Niklaus wrote:
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.

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


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


______________________________________________
R-help@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.

Reply via email to