Martin C. Martin
2006-Oct-10 16:20 UTC
[R] update.default evaluating in wrong environment?
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
Gabor Grothendieck
2006-Oct-10 17:20 UTC
[R] update.default evaluating in wrong environment?
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) 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. >