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

如何在R中结合nest与unnest使用report包生成多组统计报告

问题解决方法

你的报错根源是**report()函数需要直接处理原始统计模型对象(如t.test()返回的htest类),而不是broom::tidy()整理后的表格数据**。你现在传递给report()的是tidy处理后的tibble,丢失了模型的元信息,导致函数无法解析,进而出现NaN警告和命名匹配错误。

修正步骤:

  • 修改t_test函数,返回原始的t.test模型对象,而非tidy后的表格
  • 保留模型对象在嵌套数据框中,直接对模型调用report()
  • 按需提取或整理报告内容

修正后的完整代码:

library(broom)
library(dplyr)
library(tidyr)
library(report)
library(purrr)

df <- tibble(id = c(1,2,3,4,5,6,7,8),
             group = c(1,1,1,1,2,2,2,2),
             before = c(2,1,3,1,2,1,2,4),
             after = c(1,3,4,7,3,9,3,7))

# 修改函数:返回原始t.test模型,而非tidy后的表格
t_test <- function(df, mu = 0, alt = "two.sided", paired = T, conf.level = .99) {
  t.test(df$before, 
         df$after,
         mu = mu, 
         alt = alt,
         paired = paired,
         conf.level = conf.level)
}

# 嵌套数据并生成模型、报告
d <- df %>%
  group_by(group) %>%
  nest() %>%
  mutate(model = map(data, t_test),  # 存储原始模型
         group_report = map(model, report))  # 对每个模型生成报告

# 查看第1组的报告
d$group_report[[1]]

# 将报告转为文本格式并整理成表格
report_table <- d %>%
  mutate(report_text = map_chr(group_report, as.character)) %>%
  select(group, report_text)

print(report_table)

补充说明:

  • 原代码中unnest(ttest, .drop = T)的警告是因为tidyr 1.0.0之后弃用了.drop参数,现在默认保留所有列表列,若不需要data列,可在后续用select(-data)移除。
  • 如果需要同时保留tidy后的统计结果,可以同时存储模型和tidy结果:
d <- df %>%
  group_by(group) %>%
  nest() %>%
  mutate(model = map(data, t_test),
         ttest_tidy = map(model, tidy),
         group_report = map(model, report)) %>%
  unnest(ttest_tidy)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:01:07