[R] lattice: calling functions

Gabor Grothendieck ggrothendieck at gmail.com
Tue Feb 14 15:38:38 CET 2006


On 2/14/06, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> On 2/14/2006 8:56 AM, Wolfram Fischer wrote:
> > I defined three functions:
> >
> >> fun0 <- function( x=1:5, y=1:5, ... ) xyplot( y ~ x, ... )
> >
> >> fun1 <- function( x=1:5, y=1:5, ... ) fun2( y ~ x, ... )
> >> fun2 <- function( ... ) xyplot( ... )
> >
> > The call of fun0() works as expected.
> >
> > The call of fun1() causes the following error:
> >     'Error in eval(expr, envir, enclos) : object "y" not found'
> >
> > How should I define fun2 to avoid the error?
>
> fun2 is fine, it's fun1 that has problems.  It is passing a formula
> through fun2 to xyplot without telling xyplot where to evaluate the
> arguments.  If you change it to
>
> fun1 <- function( x=1:5, y=1:5, ... ) fun2( y ~ x, data=enviroment(), ... )
>
> it will tell xyplot to look in the current environment at the time of
> the call, i.e. the fun1 evaluation environment where x and y live.
>

Although this does seem to be how xyplot works, I think it indicates
there is a problem with it.

The help file for xyplot indicates that for the xyplot formula method
the default
environment is the caller environment whereas it ought to be the environment
of the formula:

    data: For the 'formula' method, a data frame containing values for
          any variables in the formula, as well as 'groups' and
          'subset' if applicable.  By default the environment where the
          function was called from is used.

For example, if we replace xyplot with lm it does work as expected:

   fun1 <- function( x=1:5, y=1:5, ... ) fun2( y ~ x, ... )
   fun2 <- function( ... ) lm( ... )
   fun1()




More information about the R-help mailing list