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

使用mids对象与gtsummary编写函数时出现变量未找到错误

问题原因

报错「objeto 'mpg' não encontrado」(即找不到mpg变量),核心是在mice的with()函数中,直接用paste拼接字符串公式传入lm时,公式的变量解析环境和mids对象的内部环境不匹配,导致无法定位指定的结局/暴露变量。

解决方法

改用reformulate()函数构建公式,它能直接通过变量名字符串生成合法的公式对象,完美适配mice::with()的环境逻辑。修改后的完整代码如下:

library(mice)
library(gtsummary)

mtcars <- mtcars
mtcars[2,"gear"] <- NA
mtcars[6,"vs"] <- NA

imp_mtcars <- mice(mtcars, m = 4, maxit = 1)

generate_models <- function(imp_df, outcome_var, exposure_var) {
  # 构建各模型的公式对象
  formula_m0 <- reformulate(exposure_var, response = outcome_var)
  formula_m1 <- reformulate(c(exposure_var, "vs"), response = outcome_var)
  formula_m2 <- reformulate(c(exposure_var, "vs", "gear"), response = outcome_var)
  
  # 无调整模型
  m0 <- with(imp_df, lm(formula_m0)) %>% 
    tbl_regression() %>% 
    add_glance_table(include = c(adj.r.squared))
  
  # 模型1(调整vs)
  m1 <- with(imp_df, lm(formula_m1)) %>%
    tbl_regression() %>%
    add_glance_table(include = c(adj.r.squared))
  
  # 模型2(调整vs+gear)
  m2 <- with(imp_df, lm(formula_m2)) %>%
    tbl_regression(include = all_of(exposure_var)) %>%  # 用all_of确保变量名解析正确
    add_glance_table(include = c(adj.r.squared))
  
  # 合并结果表格
  tbl_global <- tbl_merge(
    list(m0, m1, m2),
    tab_spanner = c("**Unadjusted**", "**Model 1**", "**Model 2**")
  )
  
  return(tbl_global)
}

# 测试运行
generate_models(imp_mtcars, "mpg", "hp")
关键调整点
  • 用reformulate()替代paste()构建公式:该函数直接接收变量名字符串生成公式对象,彻底解决mids环境下的变量查找问题。
  • tbl_regression(include = all_of(exposure_var)):使用all_of()包裹暴露变量名,确保gtsummary能正确识别字符串形式的变量名,避免潜在的解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:37:45