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? } 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. -- View this message in context: http://www.nabble.com/how-to-manipulate-...-within-a-function-tp21083637p21083637.html Sent from the R help mailing list archive at Nabble.com.
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.
Possibly Parallel Threads
- can a function alter the "..." argument and passed the result to another function?
- understanding as.list(substitute(...()))
- Extracting multiple elements from a list
- Getting the argument list within a function
- Can't get Sweave syntax highlighting with Emacs