Hi Ben, I have often asked myself such question and often come back to the following additional options:
(4) Use '...' and ensure encapsulated functions/calls (foo2 and foo3) also have '...' within their arguments. There is no problem to call 3dspehre with a list of arguments that include both 'radius' and 'size' if (and only if) 3dsphere function argumnts are (radius=,...) so that size will just be ignored. foo1 <- function(...){ foo2(...) foo3(...) } Document that all arguments foo2 can handle could be introduced within a cool to foo1, as well as those foo3 arguments. Only problem/point of detail is case where foo2 and foo3 do share arguments and you would like to distinguish. Then use (5) foo1 <- function(x,foo2Args=list(radius=2), foo3Args=list(size), ...){ do.call("foo2",foo2Args) # or do.call("foo2",c(foo2Args,list(...)) depending on what you prefer } Eric 2006/6/29, Ben Bolker <[EMAIL PROTECTED]>: > > > I have a general style question about R coding. > > Suppose I'm writing a function (foo1) that calls other functions > (foo2, foo3, ...) which have complicated argument > lists (e.g. optim(), plot()), _and_ > I may be calling several different functions in the body of > foo1. Since foo2 and foo3 have different sets of arguments, I > can't just use "..." ; I did write some code a while ago that > would look at formals() to dissect out arguments that should > be passed to the different functions, but it seemed overly > complex. > > The particular case I have now is a little simpler. > > foo2 (points3d) and foo3 (spheres3d) > are both functions from the rgl package > that pass arguments such as color, alpha, etc. along to > an rgl.material() command with lots of possible arguments. > (The function may also call segments3d or lines3d, but > these all have the same arguments as points3d.) > However, to change the size of points you use "size"; to > change the size of spheres you use "radius". Do I > (1) add "radius" to the argument list, cluttering up > the argument list for one particular special case? > (2) add "size" to the argument list, so that it doesn't > become part of "..." and I can say spheres3d(radius=size,...) ? > (3) do something like > dotlist = list(...) > if (type=="s" && !is.null(dotlist$size)) radius <- dotlist$size > and pull "size" out of ... myself (and make a note to that > effect in the documentation)? > (I guess another general solution to this is to ask for > lists of arguments, like MoreArgs in mapply(). Another > would be to go back and change spheres3d to make size > a synonym for radius ... ) > > any thoughts? > Ben Bolker > > > -- > 620B Bartram Hall [EMAIL PROTECTED] > Zoology Department, University of Florida http://www.zoo.ufl.edu/bolker > Box 118525 (ph) 352-392-5697 > Gainesville, FL 32611-8525 (fax) 352-392-3704 > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > -- Eric Lecoutre Consultant - Business & Decision Business Intelligence & Customer Intelligence [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel