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

如何用purrr::map与sjPlot::tab_model批量生成独立模型表格

解决方案

核心思路

要解决这个问题,关键是在批量处理时保留因变量的名称,并动态生成模型公式,同时确保每个tab_model()输出独立的结果表格。我们可以用purrr::imap()(针对命名列表的遍历函数)来同时获取列值和列名,避免因变量显示为.x的问题。

完整代码实现

# 加载所需包
library(lme4)
library(sjPlot)
library(purrr)
library(dplyr)

# 批量拟合模型并生成独立结果表格
testdata %>%
  select(sfa:pufa) %>%  # 选择需要作为因变量的列
  imap(function(dv_values, dv_name) {
    # 动态生成模型公式,用实际因变量名替换.x
    model_formula <- as.formula(paste0(dv_name, " ~ time_point + (1|subject)"))
    # 拟合线性混合效应模型
    model <- lmer(model_formula, data = testdata)
    # 生成独立表格,指定标题和模型名称
    tab_model(
      model,
      title = paste("线性混合效应模型结果:", dv_name),
      model.names = dv_name,
      # 可选:将表格保存为独立文件
      # file = paste0(dv_name, "_model_results.html")
    )
  })

代码解释

  1. imap()的作用:imap()会遍历命名列表(这里是select(sfa:pufa)返回的带列名的数据框),每次迭代同时传入列值(dv_values)和列名(dv_name),这样我们就能拿到实际的因变量名称。
  2. 动态生成公式:用paste0()拼接出包含实际因变量名的公式,替代之前的.x ~ ...,确保模型中因变量的名称正确。
  3. 自定义表格属性:通过title设置每个表格的标题,model.names指定模型显示名称,让输出的表格清晰对应每个因变量。如果需要保存结果,添加file参数即可将每个表格保存为独立的HTML文件。

替代方案(用map2())

如果更习惯分开处理列名和列值,可以用map2()实现相同效果:

dv_cols <- testdata %>% select(sfa:pufa)
dv_names <- names(dv_cols)

map2(dv_cols, dv_names, function(dv_values, dv_name) {
  model <- lmer(as.formula(paste0(dv_name, " ~ time_point + (1|subject)")), 
                data = testdata)
  tab_model(model, title = paste("模型结果:", dv_name))
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:19:54