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

R语言使用循环简化波士顿犯罪数据集Logistic回归代码的报错问题

报错原因

你构造的predictor是字符串类型,eval()默认不会直接解析字符串形式的变量调用语句,eval("Boston$zn")返回的就是"Boston$zn"这个长度为1的字符串,而非波士顿数据集中zn列的数值向量。传入plot的x参数长度为1、y参数Boston$crim长度为506,自然触发长度不一致的报错。

修复方案

不推荐用拼接字符串+eval(parse())的写法,更简洁安全的方式是使用数据框的[[操作符动态取列,同时用reformulate构造回归公式,修改后的完整循环代码如下:

library(MASS)
# 遍历除crim以外的所有列
for (clname in setdiff(colnames(Boston), "crim")){
  # 直接通过列名字符串取对应列的数值
  predictor_val <- Boston[[clname]]
  print(paste("当前分析变量:", clname))
  
  # 绘制散点图
  plot(predictor_val, Boston$crim, xlab = clname, ylab = "crim")
  # 动态构造回归公式
  lm_formula <- reformulate(clname, response = "crim")
  lm.Boston <- lm(lm_formula, data = Boston)
  # 加拟合线和均值线
  abline(lm.Boston)
  abline(v = mean(predictor_val), col = 'red')
  abline(h = mean(Boston$crim), col = 'red')
}
  • 用[[按列名取列是R中动态操作数据框列的标准写法,不需要拼接字符串或者解析表达式,稳定性更高
  • reformulate可以直接用字符向量构造回归公式,避免手动拼接公式字符串的语法错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:27:00