On 2/14/2006 9:38 AM, Gabor Grothendieck wrote: > On 2/14/06, Duncan Murdoch <[EMAIL PROTECTED]> 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()
You're right, I forgot formulas have associated environments. I've added the lattice maintainer to the cc list. Duncan Murdoch ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
