lm在列表的元素上

时间:2015-01-08 17:05:21

标签: r list lm

假设我有三个数据框的列表

set.seed(55)
df1 <- data.frame(a=rnorm(6), b=rnorm(6), c=rnorm(6))
df2 <- data.frame(a=rnorm(6), b=rnorm(6), c=rnorm(6))
df3 <- data.frame(a=rnorm(6), b=rnorm(6), c=rnorm(6))
l <- list(df1, df2, df3)

我现在想用每个数据框的a和c做一个线性模型。我尝试了以下

for(i in l) {
  x <- (lm(l[[i]]$a~l[[i]]$c))
}

但是我收到以下错误

Error in l[[i]] : invalid subscript type 'list'

我想要一个列表,每个元素都是一个l和一个c。任何帮助,将不胜感激。非常感谢你!

3 个答案:

答案 0 :(得分:5)

您可以使用简单的lapply执行此操作,如下所示:

lapply(l, lm, formula = a ~ c)

答案 1 :(得分:0)

如果你想继续使用你提出的格式(for循环),你需要在for循环语句中使用1:length(l)之类的内容。

另外,如果你继续为x分配东西,你将继续覆盖它。我在下面的内容中将线性模型分配给字母表的第24,25和26个字母,因此您有一个名为x,y和z的lm。其他建议的解决方案更清晰。

for(i in 1:length(l)) {
 assign(letters[24:26][i], (lm(l[[i]]$a~l[[i]]$c)))
}

答案 2 :(得分:0)

接受的答案是首选,但对于来自for-loop心态的人来说,可能会被告知lapply解决方案(至少是其结果被分配到的那个) &#39; x&#39;)等同于:

x<-list();
for(i in seq_along(l) ) {
      x[[i]] <- lm(a~c, data=l[[i]])
    }