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

R语言调用lme函数报错:无适用于character类对象的方法,求修复

报错修复:lme函数不接受字符型参数

报错信息

Error in UseMethod("lme") :
no applicable method for 'lme' applied to an object of class "character"

原代码

outcome = "Score"
exposures_fixed = c("Age", "Sex","BMI")
coefficients = c()
for (k in 1:length(exposures_fixed)) { 
  fix_exp = exposures_fixed [k]
  Formula = paste0(outcome,"~", fix_exp)
  mixed_model= lme(fixed = Formula, random = ~1|ID, data = DB,
                   na.action = na.omit, method = "ML")
  coef = mixed_model$coefficients$fixed[2]
  coefficients = rbind(coefficients, coef)
}

问题原因

你猜测的完全正确:lme()的fixed参数要求传入公式对象(formula),但当前代码里的Formula是拼接出来的字符串,类型不匹配导致报错。

修复方法

有两种简洁的修复方式:

方式1:用as.formula()转换字符串为公式

直接把拼接好的字符串通过as.formula()转换成公式对象即可:

outcome = "Score"
exposures_fixed = c("Age", "Sex","BMI")
coefficients = c()
for (k in 1:length(exposures_fixed)) { 
  fix_exp = exposures_fixed [k]
  # 转换为公式对象
  Formula = as.formula(paste0(outcome,"~", fix_exp))
  mixed_model= lme(fixed = Formula, random = ~1|ID, data = DB,
                   na.action = na.omit, method = "ML")
  coef = mixed_model$coefficients$fixed[2]
  coefficients = rbind(coefficients, coef)
}

方式2:用reformulate()直接构建公式

reformulate()是R里专门用来从字符向量构建公式的函数,更直观:

outcome = "Score"
exposures_fixed = c("Age", "Sex","BMI")
coefficients = c()
for (k in 1:length(exposures_fixed)) { 
  fix_exp = exposures_fixed [k]
  # 直接构建公式,response指定因变量,termlabels指定自变量
  Formula = reformulate(termlabels = fix_exp, response = outcome)
  mixed_model= lme(fixed = Formula, random = ~1|ID, data = DB,
                   na.action = na.omit, method = "ML")
  coef = mixed_model$coefficients$fixed[2]
  coefficients = rbind(coefficients, coef)
}

额外优化建议

每次循环用rbind()拼接系数效率较低,建议预先初始化一个向量来存储结果:

outcome = "Score"
exposures_fixed = c("Age", "Sex","BMI")
# 预先初始化向量,长度等于自变量数量
coefficients = numeric(length(exposures_fixed))
for (k in seq_along(exposures_fixed)) { 
  fix_exp = exposures_fixed [k]
  Formula = reformulate(fix_exp, outcome)
  mixed_model= lme(fixed = Formula, random = ~1|ID, data = DB,
                   na.action = na.omit, method = "ML")
  # 直接赋值到对应位置
  coefficients[k] = mixed_model$coefficients$fixed[2]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:24:07