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

使用purrr包循环运行Dunn test时tidy函数提取结果报错如何解决

问题原因

你使用的FSA::dunnTest()返回的dunnTest类对象,broom包暂未提供对应的tidy()适配方法,因此触发报错。

解决方案

方案1:直接提取结果(最简实现)

dunnTest返回结果为列表结构,检验结果表格直接存储在$res子元素中,直接提取即可,不需要依赖tidy():

# 需先加载依赖包
library(tidyverse)
library(FSA)

df <- data.frame(Type = c("n1", "n1", "n2", "n2", "n3", "n3", "n4", "n4", "n1", "n1", "n2", "n2", "n3", "n3", "n4", "n4"),
                 group = c("gr1", "gr1", "gr1", "gr1", "gr1", "gr1", "gr1", "gr1", "gr2", "gr2", "gr2", "gr2", "gr2", "gr2", "gr2", "gr2"),
                 value = runif(16, min = 1, max = 30))

tbl <- df %>%
  mutate(Type = factor(Type, levels = c("n1", "n2", "n3", "n4"))) %>% 
  nest(data = -group) %>% 
  mutate(fit = map(data, ~dunnTest(value~Type, data= .x, method = "bh")),
         # 直接提取结果表
         tidied = map(fit, ~.x$res))

# 可后续用unnest展开所有分组的检验结果
all_res <- tbl %>% unnest(tidied)

方案2:自定义tidy方法(适配统一工作流)

如果你需要保持和broom生态一致的调用逻辑,可手动为dunnTest类注册S3方法:

# 自定义tidy方法,运行一次即可全局生效
tidy.dunnTest <- function(x, ...) {
  x$res
}

# 原代码无需修改即可正常运行
tbl <- df %>%
  mutate(Type = factor(Type, levels = c("n1", "n2", "n3", "n4"))) %>% 
  nest(data = -group) %>% 
  mutate(fit = map(data, ~dunnTest(value~Type, data= .x, method = "bh")),
         tidied = map(fit, tidy))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:06:02