[R] Formula in lm inside lapply

Gabor Grothendieck ggrothendieck at gmail.com
Wed Aug 15 18:53:30 CEST 2007


It can't find x since the environment of formula1 and of formula2 is the Global
Environment and x is not there -- its local to the function.

Try this:

#generating data
set.seed(1)
DF <- data.frame(y = rnorm(100, 1), x1 = rnorm(100, 1), x2 = rnorm(100, 1),
  group = rep(c("A", "B"), c(40, 60)))

formula1 <- as.formula(y ~ x1)
lapply(levels(DF$group), function(x) {
   environment(formula1) <- environment()
   lm(formula1, DF, subset = group == x)
})

formula2 <- as.formula(y ~ x1 + x2)
lapply(levels(DF$group), function(x) {
   environment(formula2) <- environment()
   lm(formula2, DF, subset = group == x)
})



On 8/15/07, Li, Yan (IED) <Yan.Y.Li at morganstanley.com> wrote:
> I am trying to run separate regressions for different groups of
> observations using the lapply function. It works fine when I write the
> formula inside the lm() function. But I would like to pass formulae into
> lm(), so I can do multiple models more easily. I got an error message
> when I tried to do that. Here is my sample code:
>
> #generating data
> x1 <- rnorm(100,1)
> x2 <- rnorm(100,1)
> y  <- rnorm(100,1)
> group <- rep(c("A","B"),c(40,60))
> group <- factor(group)
> df <- data.frame(y,x1,x2,group)
>
> #write formula inside lm--works fine
> res1 <- lapply(levels(df$group), function(x) lm(y~x1,df, subset = group
> ==x))
> res1
> res2 <- lapply(levels(df$group),function(x) lm(y~x1+x2,df, subset =
> group ==x))
> res2
>
> #try to pass formula into lm()--does not work
> formula1 <- as.formula(y~x1)
> formula2 <- as.formula(y~x1+x2)
> resf1 <- lapply(levels(df$group),function(x) lm(formula1,df, subset =
> group ==x))
> resf1
> resf2 <- lapply(levels(df$group),function(x) lm(formula2,df, subset =
> group ==x))
> Resf2
>
> The error message is
> 'Error in eval(expr, envir, enclos): object "x" not found'
>
> Any help is greatly appreciated!
>
> Yan
> --------------------------------------------------------
>
> This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}
>
> ______________________________________________
> 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