R语言for循环无法正确打印每次迭代 如何逐列运行ANOVA分析
问题解决方法
你当前代码的核心错误是:循环中i是字符串格式的列名,直接写入aov()的公式参数时,R不会将其解析为CR数据框中对应的列变量,导致每次循环实际运行的都是无效的固定公式,所以输出结果重复。
以下是两种可直接运行的修正方案:
方案一:用reformulate动态生成公式(更推荐,写法简洁不易出错)
CR <- data2[data2$cv == "CR",] colu <- CR[,5:36] for (i in colnames(colu)){ # 动态构造因变量为当前列的公式 f <- reformulate(termlabels = c("block", "loc"), response = i) ANOVA <- aov(f, data=CR) ANOVA_SUMMARY <- summary(ANOVA) test <- HSD.test(ANOVA , "loc") # 打印对应列名,方便匹配结果和分析列,不需要可删除 cat("当前分析列:", i, "\n") print(test$groups) }
方案二:手动拼接公式字符串后转公式对象
CR <- data2[data2$cv == "CR",] colu <- CR[,5:36] for (i in colnames(colu)){ # 拼接公式字符串后转换为公式对象 f <- as.formula(paste0(i, " ~ block + loc")) ANOVA <- aov(f, data=CR) ANOVA_SUMMARY <- summary(ANOVA) test <- HSD.test(ANOVA , "loc") # 打印对应列名,方便匹配结果和分析列,不需要可删除 cat("当前分析列:", i, "\n") print(test$groups) }
两种方案效果完全一致,均可实现对每一列单独运行ANOVA和后续HSD检验的需求。
内容的提问来源于stack exchange,提问作者Cruzcontrol
相关产品推荐
相关产品推荐

