使用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
相关产品推荐
相关产品推荐

