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

R语言循环访问数据框列构建线性模型绘图报错咨询

问题描述

我是R语言新手,想要循环绘制三个线性模型的结果。将列名存入带引号的向量lambdas <- c("lambda_of_antibody1", "lambda2", "lambda3"),在循环中用get()访问列构建lm模型,再用sjPlot::plot_model绘图时出现报错:

"Some of the specified terms were not found in the model. Maybe misspelled?"

发现模型中的项名为get(lambdas[i])而非实际列名,尝试修改fit$coefficients的名称仍无效,咨询如何正确访问数据框列以解决问题。

附数据框示例:

> head(df)
# A tibble: 6 × 5
  lambda_of_antibody1 mean_cplx sd_cplx lambda2 lambda3
                <dbl>     <dbl>   <dbl>   <dbl>   <dbl>
1                0.05    0.538     8.14  0.0525  0.0526
2                0.1     0.442    16.7   0.11    0.111
3                0.15    0.696    25.4   0.173   0.176
4                0.2     0.0541   35.1   0.24    0.248
5                0.25    0.479    45.5   0.312   0.328
6                0.3     0.358    55.9   0.39    0.417
解决方案

问题根源是用get()构建模型时,公式中保留了get(lambdas[i])表达式,而非实际列名,导致sjPlot无法识别对应项。以下两种方法可解决:

方法1:动态拼接公式字符串

将模型公式拼接为字符串后转成公式对象,模型项会显示实际列名:

lambdas <- c("lambda_of_antibody1", "lambda2", "lambda3")
for (i in seq_along(lambdas)) {
  # 拼接公式字符串,例如生成"mean_cplx ~ lambda_of_antibody1"
  formula_str <- paste("mean_cplx ~", lambdas[i])
  # 转换为公式对象传入lm
  fit <- lm(as.formula(formula_str), data = df)
  # 正常绘图
  sjPlot::plot_model(fit)
}

方法2:使用.data代词(tidyverse风格)

借助.data代词引用列名,模型系数名称会自动对应实际列名:

lambdas <- c("lambda_of_antibody1", "lambda2", "lambda3")
for (i in seq_along(lambdas)) {
  fit <- lm(mean_cplx ~ .data[[lambdas[i]]], data = df)
  sjPlot::plot_model(fit)
}

两种方法都能让sjPlot::plot_model正确识别模型中的terms,避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:24:59