[R] Environment of a LM created in a function

Thaler, Thorn, LAUSANNE, Applied Mathematics Thorn.Thaler at rdls.nestle.com
Fri Jul 29 10:37:26 CEST 2011

Dear all,

Quite often I have the situation that I've multiple response variables
and I create Linear Models for them in a function. The following code
illustrates my usual approach:

dat <- data.frame(x = rep(rep(1:3, each = 3), 4), y = rep(1:3, 12))
dat$z1 <- rnorm(36, dat$x + dat$y)
dat$z2 <- rnorm(36, dat$x + 2*dat$y)
dat$z3 <- rnorm(36, dat$x + 3*dat$y)

modelInFunction <- function(resp, expl, df) {
  fo <- as.formula(paste(resp, paste(expl, collapse = " + "), sep = " ~
  lm(fo, data = df)

ex <- c("x", "y")
resp <- paste("z", 1:3, sep = "")

models <- lapply(resp, modelInFunction, expl = ex, df = dat)

So far so good. But if I try to update any of the models afterwards, I
get an error:

> update(models[[1]], . ~ . )
Error in terms.formula(formula, data = data) : 
  'data' argument is of the wrong type

In my opinion this happens, because the update function does not know
where to look for the data frame containing the original values.
However, if I try


I get the right answer. Thus, I guess it has something to do with
different environments and I was wondering what the recommended way
would be to create an LM object within a function, which could be
processed outside this particular function in the usual way? Or is it
simply a bug in update?

Any help highly appreciated.



More information about the R-help mailing list