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
>
> ______________________________________________
> [email protected] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
--
Eric Lecoutre
Consultant - Business & Decision
Business Intelligence & Customer Intelligence
[[alternative HTML version deleted]]
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel