使用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
相关产品推荐
相关产品推荐

