如何针对单列与多列执行ANOVA分析?R代码报错求助
解决方案:批量对iris数值列与Species执行ANOVA分析
你的两段代码无法运行的核心问题有三个:
across是dplyr专属函数,必须搭配dplyr的数据操作动词(如summarise/mutate)或管道上下文使用,不能直接传入list。aov的公式写法错误:across中的.无法在aov公式里直接解析为当前列名,需要动态构造公式。- 模型对象属于复杂类型,用
summarise时必须将其包裹为列表,否则无法存入数据框单元格。
下面提供两种可行的实现方式:
方法一:用purrr批量生成模型(推荐,更直观)
先加载依赖包,提取数值列名后批量构建ANOVA模型:
library(dplyr) library(purrr) # 获取所有数值列的名称 numeric_cols <- iris %>% select(where(is.numeric)) %>% colnames() # 批量生成每个数值列与Species的ANOVA模型 anova_models <- map(numeric_cols, ~ aov(reformulate("Species", response = .x), data = iris)) # 查看任意模型的结果,比如Sepal.Length的ANOVA汇总 summary(anova_models[[1]])
方法二:用dplyr的across在数据框中存储模型
如果坚持用across,可以在summarise中把模型包裹为列表,并用cur_column()获取当前列名构造公式:
library(dplyr) # 生成包含所有ANOVA模型的数据框 iris_anova <- iris %>% summarise( across(where(is.numeric), ~ list(aov(reformulate("Species", response = cur_column()), data = iris))) ) # 提取并查看Sepal.Width的模型结果 summary(iris_anova$Sepal.Width[[1]])
内容的提问来源于stack exchange,提问作者KaiLi
相关产品推荐
相关产品推荐

