[R] passing subsets of '...' to several other functions

Gavin Simpson gavin.simpson at ucl.ac.uk
Tue Oct 23 13:47:59 CEST 2007


On Tue, 2007-10-23 at 12:15 +0100, Prof Brian Ripley wrote:
> Take a look at several of the graphics functions, e.g. plot.default(), for 
> a good way to do this via local functions.

Dear Prof. Ripley

Thank you for your solution - this works well for my real problem. This
is such a simple solution that I was thrown by it and it took me a few
minutes to realise how this worked - very neat!

All the best,

Gavin

> 
> On Tue, 23 Oct 2007, Gavin Simpson wrote:
> 
> > Dear List,
> >
> > Say I have a function foo() that accepts a varying number of arguments.
> > This function does some plotting so I want '...' to be able to accept
> > graphics parameters to be passed to plot() or points() say, but '...'
> > should also accept optional arguments for function bar(), called from
> > within foo(). I don't want to hard code some extra arguments into the
> > formal arguments of foo(). What is a good way to proceed?
> >
> > This little example might show you what I want to achieve:
> >
> > foo <- function(x, arg1 = 1:10, ...)
> > {
> >   X <- bar(x = x, choices = arg1, ...)
> >   plot(X, ...)
> >   invisible(X)
> > }
> > bar <- function(x, choices, other = 20:30, another = 80:90, ...)
> > {
> >   x[c(choices, other)]
> > }
> >
> > Using this as so:
> >
> > foo(rnorm(100), other = 50:70, another = 30:40,
> >    pch = 3, cex = 3, col = "red")
> >
> > generates lots of warnings because 'other' and 'another' are not
> > recognised graphical parameters.
> >
> > I can grab ... and look at what arguments are passed via ... in the call
> > to foo() and check if any of the arguments I actually want to look for
> > have been specified. I'm not sure how then to proceed, to pass only
> > those arguments to bar() and the rest to plot(). In my example, I'd want
> > to strip 'other' and 'another' from '...' and pass them as arguments to
> > bar() and pass the remaining graphical parameters on to plot().
> >
> > One option would be to build up the function calls to bar() and plot()
> > using eval(parse(paste( .... ))), but as fortune("Lumley") says, I
> > should probably rethink this.
> >
> > I searched the R-Help archives but most posts I found there were
> > interested in grabbing arguments in '...' and doing one thing or another
> > depending on what argument were called. I didn't see anything that
> > related to subsetting arguments in '...' and subsequently passing the
> > subsets on to different functions via '...' also.
> >
> > Thanks in advance.
> >
> > G
> >
> >
> 
-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Gavin Simpson                 [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



More information about the R-help mailing list