[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