[R] update.default evaluating in wrong environment?

Gabor Grothendieck ggrothendieck at gmail.com
Tue Oct 10 22:13:16 CEST 2006


Perhaps the evaluate= argument could be extended to
allow an environment or an object for which
environment(object) yields an environment, e.g.

update(y ~ x2, evaluate = formula(f.lm))


On 10/10/06, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> On 10/10/2006 1:32 PM, Martin C. Martin wrote:
> >
> > Gabor Grothendieck wrote:
> >> As a workaround use evaluate=FALSE argument to update and
> >> evaluate it yourself fetching the environment from the innards
> >> of the lm structure:
> >>
> >> f <- function() {
> >>   DF <- data.frame(y = 1:12, x1 = gl(2, 1, 12), x2 = gl(2,6))
> >>   lm(y ~ x1, DF)
> >> }
> >>
> >> f.lm <- f()
> >> e <- attr(terms(f.lm), ".Environment")
> >> eval(update(f.lm, formula = y ~ x2, evaluate = FALSE), e)
> >
> > Thanks, or even just:
> >
> > e <- environment(formula(f.lm))
> >
> > But this was more of a bug report.  Is update.default wrong?  Should it
> > be changed?  I don't see how evaluating in update's parent environment
> > would ever be better default behavior than the formula's environment.
>
> This is pretty old code:  I think the particular line causing the
> problem you see was put there in 2000, but it was a workalike for code
> that was there already in 1998.  This isn't to say that old code is
> necessarily right, but changing it could have lots of unwanted side
> effects.  It's also likely that whatever was in the mind of whoever
> wrote the original shows up in other places, so tracking things down to
> make a consistent change would be a lot of work.  You'd probably want to
> read the referenced 1992 Statistical Models definition of the expected
> behaviour here pretty closely (and recognize that the 1992 book is about
> S, not R, so we might not want to follow it exactly), etc., etc., etc.
>
> All of which is to say that I wouldn't pick up this bug fix unless I was
> personally bitten by it:  it looks like an awful lot of work.  But there
> are others who may want to tackle it.
>
> Duncan Murdoch
>
> >
> > - Martin
> >>
> >>
> >> On 10/10/06, Martin C. Martin <martin at martincmartin.com> wrote:
> >>> Hi all,
> >>>
> >>> update.default, which is the method used to update "lm" objects (among
> >>> others), extracts the "call" element from it's first argument, updates
> >>> it, then evaluates it in the parent.frame().  Shouldn't it be evaluated
> >>> in environment(formula(object)), if that's non-NULL?
> >>>
> >>> I ask because I call "lm" from within a function, and the data argument
> >>> is a local variable of that function.  After that, I can't update the
> >>> model any more, since the new lm() call (the one evaled in
> >>> parent.frame()) can't find the data.
> >>>
> >>> Best,
> >>> Martin
> >>>
> >>> ______________________________________________
> >>> R-help at 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
> >>> and provide commented, minimal, self-contained, reproducible code.
> >>>
> >
> > ______________________________________________
> > R-help at 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
> > and provide commented, minimal, self-contained, reproducible code.
>
>



More information about the R-help mailing list