r - 对于线性模型,有没有办法遍历 r 中的列名(不是数字)?

标签 r loops for-loop linear-regression anova

我有一个数据表,其中包含 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/

相关文章:

c++ - for 循环未运行,试图向后遍历数组元素

r - 在ggplot中设置调色板的透明度/饱和度

r - 从对象名称中提取元素

javascript - for 循环和图像

javascript - 识别 Javascript 对象中的最后一次迭代

C - for 循环代码之间的差异

java - 简化 map 上的嵌套循环

R–将函数应用于列表中的特定列

r - 如何导入data.table索引功能?

python - 从文本文件 PYTHON 填充字典