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:
---------------8<--------------- set.seed(123) 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) ---------------8<--------------- So far so good. But if I try to update any of the models afterwards, I get an error: ---------------8<--------------- > update(models[[1]], . ~ . ) Error in terms.formula(formula, data = data) : 'data' argument is of the wrong type ---------------8<--------------- 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 ---------------8<--------------- model.frame(models[[1]]) ---------------8<--------------- 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. Thanks, -Thorn ______________________________________________ R-help@r-project.org 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.