[R] how to manipulate ... within a function

Duncan Murdoch murdoch at stats.uwo.ca
Fri Dec 19 02:36:22 CET 2008


On 18/12/2008 7:19 PM, Dan Kelley wrote:
> Is there a way a function ('parent', say) can manipulate the ... argument,
> and then pass the manipulated value into another function ('child', say)
> that it calls?
> 
> What I'm trying to do is to use some plotting defaults within 'parent' that
> are not part of parent's argument list, but to let the use over-ride these
> defaults if they choose.  A sketch is below.
> 
> parent <- function(stuff, ...) {
>   dots <- list(...)
>   if (!"type" in names(list)) dots$type='p'
>   plot(stuff, unlist(dots))  # or alist()? or what?

You use the do.call() function to construct the call.  The first arg is 
what to call, the second is a list containing the args to pass.  Since 
you've got both stuff and dots to pass, you concatenate them into one 
big list:

do.call(plot, c(list(stuff), dots))

Duncan Murdoch

> }
> 
> I know, I can just make "type" be a formal argument of 'parent', and I'm
> happy to do that, but I'm still in the learning stages with R, and so I'm
> trying to become more familiar with as much R syntax as I can, even if I end
> up doing things differently later on.



More information about the R-help mailing list