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

如何用purrr::map生成Wilcoxon检验的report文本报告

解决分组Wilcoxon检验结合report包生成报告的问题

问题背景

需要按Session分组,使用purrr映射执行配对Wilcoxon检验,再通过report包生成标准化文本报告,但运行代码时出现报错,提示无法计算效应量,原因是无法从htest对象中检索原始数据。

报错原因

默认的wilcox.test()返回的htest对象不会保存原始数据集,而report包生成完整报告时需要原始数据来计算效应量(如秩相关系数r),因此当通过map批量处理时,report无法从htest对象中获取所需数据,进而触发报错。

解决方案

以下两种方法均可解决该问题:

方法一:修改检验函数,让htest对象保留原始数据

在自定义的检验函数中,将原始数据附加到返回的htest对象中,使report能直接从对象中提取数据计算效应量:

library(tidyverse)
library(report)

# 构造示例数据
df <- tibble(Session = c(rep("1", 10), rep("2", 10)),
             scores = sample(20:70, 20),
             group = c(rep("before", 5), rep("after",5),
                       rep("before", 5), rep("after",5)))

# 修改后的Wilcoxon检验函数,附加原始数据到htest对象
w_test <- function(df) {
  test <- wilcox.test(scores ~ group, df, paired = TRUE)
  test$data <- df  # 将原始数据存入htest对象
  test
}

# 分组生成检验结果和报告
w_results <- df %>%
  group_by(Session) %>%
  nest() %>%
  mutate(wtest = map(data, w_test),
         result = map(wtest, report))

# 查看各分组的报告
w_results$result

方法二:调用report时显式传入原始数据

无需修改检验函数,使用map2同时传递htest对象和对应的分组数据,在report调用时显式指定data参数:

library(tidyverse)
library(report)

# 构造示例数据
df <- tibble(Session = c(rep("1", 10), rep("2", 10)),
             scores = sample(20:70, 20),
             group = c(rep("before", 5), rep("after",5),
                       rep("before", 5), rep("after",5)))

# 原检验函数无需修改
w_test <- function(df) {
  wilcox.test(scores ~ group, df, paired = TRUE)
}

# 分组生成检验结果,并用map2传递htest和数据给report
w_results <- df %>%
  group_by(Session) %>%
  nest() %>%
  mutate(wtest = map(data, w_test),
         # 同时传入wtest对象和对应分组数据
         result = map2(wtest, data, ~report(.x, data = .y)))

# 查看各分组的报告
w_results$result

结果说明

执行上述代码后,w_results$result列会存储每个Session对应的标准化文本报告,包含检验类型、效应量、p值等完整统计信息,可直接提取使用或进一步处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:55:09