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

broom::tidy与purrr::map_dfr配合失效问题求助

问题分析与解决办法

别着急,我帮你拆解下可能的问题,再给你几个靠谱的解决方案:

1. 先补全并修正基础代码

首先,你的代码里可能漏掉了broom包的加载(它不属于tidyverse核心包,得单独加载),而且部分分组的样本量可能会触发精确检验的报错,我们先把代码补全修正:

library(tidyverse)
library(broom) # 必须单独加载这个包

# 转换iris为长格式
iris_long <- iris %>%
  pivot_longer(-Species, names_to = "measure", values_to = "value")

# 按测量指标分组,执行组间Wilcoxon秩和检验(加exact=FALSE避免报错)
iris_test_results <- iris_long %>%
  group_by(measure) %>%
  summarise(test = list(wilcox.test(value ~ Species, exact = FALSE)))

2. 两种正确的tidy+合并方式

方式一:mutate + unnest 分步处理

先给列表列里的每个检验结果做tidy整理,再展开合并成数据框:

tidy_wilcox_results <- iris_test_results %>%
  # 对每个检验对象执行tidy整理
  mutate(tidy_output = map(test, broom::tidy)) %>%
  # 展开列表列成常规列
  unnest(tidy_output) %>%
  # 移除不需要的原检验对象列表列
  select(-test)

方式二:group_modify 一步到位

如果你不想先生成中间的列表列,也可以直接用group_modify在分组后直接处理并输出tidy结果:

tidy_wilcox_results <- iris_long %>%
  group_by(measure) %>%
  group_modify(~ broom::tidy(wilcox.test(.$value ~ .$Species, exact = FALSE)))

3. 常见踩坑点排查

如果还是跑不通,你可以检查这几个地方:

  • 有没有加载broom包:这是最容易漏掉的点,毕竟tidyverse不包含它
  • 检验对象是否有效:比如某些分组的样本量太小,导致检验无法执行,可以提前过滤掉样本量不足的分组,或者加上exact=FALSE参数
  • unnest语法问题:如果你用的是旧版tidyr,可能需要写成unnest(cols = c(tidy_output))而不是直接unnest(tidy_output)

内容的提问来源于stack exchange,提问作者Indrajeet Patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:57:10