lm 在列表的元素上
lm on element of a list
假设我有一个包含三个数据框的列表
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'
我想要一个列表,其中每个元素都是 a 和 c 的 lm。任何帮助,将不胜感激。非常感谢!
你可以用一个简单的 lapply
来做到这一点,就像这样:
lapply(l, lm, formula = a ~ c)
如果您想保留您建议的格式(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)))
}
公认的答案是首选,但它可能对来自 for-loop 心态的人有用,被告知 lapply
解决方案(至少它的结果被分配给 'x') 等同于:
x<-list();
for(i in seq_along(l) ) {
x[[i]] <- lm(a~c, data=l[[i]])
}
假设我有一个包含三个数据框的列表
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'
我想要一个列表,其中每个元素都是 a 和 c 的 lm。任何帮助,将不胜感激。非常感谢!
你可以用一个简单的 lapply
来做到这一点,就像这样:
lapply(l, lm, formula = a ~ c)
如果您想保留您建议的格式(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)))
}
公认的答案是首选,但它可能对来自 for-loop 心态的人有用,被告知 lapply
解决方案(至少它的结果被分配给 'x') 等同于:
x<-list();
for(i in seq_along(l) ) {
x[[i]] <- lm(a~c, data=l[[i]])
}