R语言循环访问数据框列构建线性模型绘图报错咨询
问题描述
我是R语言新手,想要循环绘制三个线性模型的结果。将列名存入带引号的向量lambdas <- c("lambda_of_antibody1", "lambda2", "lambda3"),在循环中用get()访问列构建lm模型,再用sjPlot::plot_model绘图时出现报错:
"Some of the specified
termswere 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
相关产品推荐
相关产品推荐

