我有一个数据表,其中包含 40 个数据列(40 种不同的营养素),以及用于绘图编号和因子的附加列。我想自动循环遍历每个列名并为每个列生成一个线性模型和摘要。数据列从第 10 列开始。
for(i in 10:ncol(df)) { # for-loop over columns
mod2<-aov(i~block+tillage*residue+Error(subblock),data=df)
summary(mod2)
}
这目前正在产生错误 model.frame.default 中的错误(公式 = i ~ 子 block ,数据 = df,drop.unused.levels = TRUE):可变长度不同(为“子 block ”找到)
可变长度是一致的,所以我想我循环不正确。
数据类似于下图(开头有更多分类列),营养列从第 10 列开始。
阻止 | 耕作 | 残留 | 子 block | 营养 1 | 营养素2 | 等等。 |
---|---|---|---|---|---|---|
b1 | 新台币 | NR | s1 | 0.5 | 0.6 |
最佳答案
一般来说,使用 dput()
发布数据样本会很有帮助。如果没有,我将使用内置数据集 mtcars
向您展示如何使用 formula()
完成您正在做的事情:
head(mtcars)
# mpg cyl disp hp drat wt qsec vs am gear carb
# Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
# Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
# Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
# Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# Select columns
desired_columns <- names(mtcars)[!names(mtcars)=="mpg"]
for (column in desired_columns){
this_formula = formula(paste("mpg ~ ", column))
print(summary(lm(this_formula, data = mtcars)))
}
这将为数据中的每个 var
输出 lm(mpg ~ var)
。关键是 paste()
语句,它将表达式构建成一个字符串,然后 formula()
使它成为一个公式对象 希望你能看到它是如何应用的到您的数据。
关于r - 对于线性模型,有没有办法遍历 r 中的列名(不是数字)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71737719/