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

R语言:如何快速用modelsummary处理模型列表列?

问题:使用modelsummary处理列表列的最优方式

我常用以下代码拟合模型:

mtcars %>% 
  nest(-cyl) %>% 
  mutate(model=map(data, function(x) lm(hp~mpg, data=x)), 
         model2=map(data, function(x) lm(hp~mpg+wt, data=x)))->models
library(tidyverse)
models

由于models$model和models$model2是列表列,我原本以为modelsummary可以直接处理,但实际需要调整。

目前我用以下代码可以生成表格,但不知道如何对表格进行后处理(比如添加表头行):

models %>% 
  pivot_longer(c(model:model2)) %>% 
  select(value) %>% 
  as.list() %>% 
  map(., modelsummary,output="kableExtra", stars=T)

尝试后处理时出错:

models %>% 
  pivot_longer(c(model:model2)) %>% 
  select(value) %>% 
  as.list() %>% 
  map(., modelsummary,output="kableExtra", stars=T) %>% 
  add_header_above(header=c(" "=1, "4"=2:3, "6"=4:5))

想请教使用modelsummary处理这类列表列的最快方法是什么?


解决方案

方法1:合并模型列表,一次性生成表格

不需要循环生成多个表格,直接提取所有列表列中的模型合并为一个列表,一次性传入modelsummary,生成单个表格后再做后处理:

library(modelsummary)
library(tidyverse)
library(kableExtra)

# 提取所有模型并合并
all_models <- c(models$model, models$model2)

# 自定义模型名称(方便区分分组和公式)
model_labels <- paste0("cyl=", models$cyl, "_", rep(c("hp~mpg", "hp~mpg+wt"), each = nrow(models)))

# 生成表格并添加表头
modelsummary(all_models, 
             output = "kableExtra", 
             stars = TRUE,
             model.names = model_labels) %>%
  add_header_above(header = c(" " = 1, "4缸组" = 2, "6缸组" = 2, "8缸组" = 2))

方法2:结合tidyverse数据整理与modelsummary分组参数

更贴合你的工作流,先把数据整理为每行对应一个模型的格式,再用modelsummary的group参数自动分组,后续直接做后处理:

models %>%
  pivot_longer(cols = c(model, model2), 
               names_to = "模型公式", 
               values_to = "模型对象") %>%
  mutate(分组 = paste("cyl=", cyl)) %>%
  modelsummary(模型对象, 
               output = "kableExtra", 
               stars = TRUE,
               group = 分组,
               model.names = 模型公式) %>%
  add_header_above(header = c(" " = 1, "4缸" = 2, "6缸" = 2, "8缸" = 2))

原代码出错原因

你用map生成的是多个独立的kableExtra表格组成的列表,而add_header_above只能作用于单个表格对象,因此会报错。上面两种方法均生成单个表格,可正常进行后处理操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:50:01