You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何针对单列与多列执行ANOVA分析?R代码报错求助

解决方案:批量对iris数值列与Species执行ANOVA分析

你的两段代码无法运行的核心问题有三个:

  1. across 是dplyr专属函数,必须搭配dplyr的数据操作动词(如summarise/mutate)或管道上下文使用,不能直接传入list。
  2. aov 的公式写法错误:across 中的. 无法在aov公式里直接解析为当前列名,需要动态构造公式。
  3. 模型对象属于复杂类型,用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 14:57:22