From: Deepayan Sarkar <deepayan.sarkar_at_gmail.com>

Date: Wed 15 Feb 2006 - 03:59:11 EST

> You're right, I forgot formulas have associated environments. I've

*> added the lattice maintainer to the cc list.
*

>

> Duncan Murdoch

R-help@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Tue Feb 21 09:10:00 2006

Date: Wed 15 Feb 2006 - 03:59:11 EST

On 2/14/06, Duncan Murdoch <murdoch@stats.uwo.ca> wrote:

> On 2/14/2006 9:38 AM, Gabor Grothendieck wrote:

*> > On 2/14/06, Duncan Murdoch <murdoch@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(), ...
**> )
*

data=NULL works too, which is apparently what lm has. The point being that the environment of the formula is looked at, but the default data=parent.frame() subverts that because of the way eval works (using enclos only when envir is a list or data frame. What's wrong with environments?). Even the following works:

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

fun2( y ~ x, data = data.frame(x = x), ... )

I don't understand non-standard evaluation all that well, so I'll happily consider any suggestions. I'll try changing the defaults to NULL and see if there are any obvious problems.

Deepayan

> >> 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

>

> Duncan Murdoch

R-help@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Tue Feb 21 09:10:00 2006

*
This archive was generated by hypermail 2.1.8
: Fri 03 Mar 2006 - 03:42:38 EST
*