假设我有三个数据框的列表
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。任何帮助,将不胜感激。非常感谢你!
答案 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]])
}