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

在循环中使用get()函数时如何正确计算emmeans?

循环中结合get()使用emmeans的报错解决方法

问题背景

循环处理20列数据时,lmer混合效应模型运行正常,但调用emmeans时因公式中使用get(thisvar)报错。

原代码

for(thisvar in thesevars){
mod_linear <- lmer(edss ~ time + get(thisvar) + age + gender + relapse_prior_1yr + new_lesions_prior_1yr + weight + (1|id), data = dat_long)
emms_mod_linear <- emmeans(mod_linear, ~ time, at = list(time = seq(0, 12, 1)))
}

报错信息

Error in (function (object, at, cov.reduce = mean, cov.keep = get_emm_option("cov.keep"),  : 
  We are unable to reconstruct the data.
The variables needed are:
    time thisvar age gender relapse_prior_1yr new_lesions_prior_1yr weight
Are any of these actually constants? (specify via 'params = ')
The dataset name is:
    dat_long
Does the data still exist? Or you can specify a dataset via 'data = '

报错原因

emmeans需要从模型对象中提取变量名来重构分析数据,但用get(thisvar)构建公式时,模型中记录的变量名是get(thisvar)而非实际的列名,导致emmeans无法匹配数据集中的真实变量,进而触发重构失败的错误。

解决方法

方法1:用reformulate动态构建公式(推荐)

通过reformulate()函数直接将循环变量thisvar对应的真实列名写入模型公式,让模型存储正确的变量名,emmeans即可正常识别。

修改后的代码:

for(thisvar in thesevars){
  # 动态生成包含真实列名的模型公式
  model_formula <- reformulate(
    terms = c("time", thisvar, "age", "gender", "relapse_prior_1yr", 
              "new_lesions_prior_1yr", "weight", "(1|id)"),
    response = "edss"
  )
  
  mod_linear <- lmer(model_formula, data = dat_long)
  emms_mod_linear <- emmeans(mod_linear, ~ time, at = list(time = seq(0, 12, 1)))
  
  # 可在此添加结果保存逻辑,例如存入列表
  # 比如:emms_results[[thisvar]] <- emms_mod_linear
}

方法2:手动指定emmeans的data参数(备选)

如果坚持使用get(),可以在调用emmeans时显式传入data = dat_long,强制emmeans使用原始数据集重构数据,但这种方法仍可能因变量名匹配问题出现异常,仅作为备选方案:

for(thisvar in thesevars){
  mod_linear <- lmer(edss ~ time + get(thisvar) + age + gender + relapse_prior_1yr + new_lesions_prior_1yr + weight + (1|id), data = dat_long)
  emms_mod_linear <- emmeans(mod_linear, ~ time, at = list(time = seq(0, 12, 1)), data = dat_long)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:03:33