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

R语言线性回归报错:替换行数与数据行数不匹配问题求助

问题原因

报错的核心是数据裁剪逻辑错误:

  1. 你在循环中连续两次删减行(papa <- papa[-1, ] + papa <- papa[1:(nrow(papa)-1), ]),导致Ctem列的长度比后续处理的Colum4多一行,赋值时出现长度不匹配。
  2. 每次循环都从原始df创建papa,没有基于上一次优化后的数据集继续迭代,不符合“重复调整并重新分析”的需求。

修正后的代码

library(openxlsx)

# 读取文件
file_path <- "C://Users//hhernandez//OneDrive - Unitec NZ//Desktop//Cal R/pp.xlsx"
df <- read.xlsx(file_path)

# 初始化当前数据集:提取第4列和Ctem列
current_data <- data.frame(Col4 = df[[4]], Ctem = df$Ctem)

# 初始线性回归计算
reg <- lm(Ctem ~ Col4, data = current_data)
r_squared <- summary(reg)$r.squared

# 存储所有迭代结果的表格
pepe <- data.frame(Equation = character(), `R-squared` = numeric(), stringsAsFactors = FALSE)
# 先记录初始回归结果
initial_eq <- paste("y =", round(coef(reg)[2], 2), "x +", round(coef(reg)[1], 2))
pepe <- rbind(pepe, data.frame(Equation = initial_eq, `R-squared` = r_squared))

# 循环执行优化逻辑
while (r_squared < 0.8) {
  # 执行正确的裁剪:Ctem删除首个值,第4列删除最后一个值
  new_data <- data.frame(
    Col4 = current_data$Col4[-nrow(current_data)],
    Ctem = current_data$Ctem[-1]
  )
  
  # 防御性检查:确保两行列数一致
  if (length(new_data$Col4) != length(new_data$Ctem)) {
    warning("行列数不一致,终止循环")
    break
  }
  
  # 重新计算线性回归与R²
  reg_new <- lm(Ctem ~ Col4, data = new_data)
  new_r_squared <- summary(reg_new)$r.squared
  
  # 记录本次迭代的结果
  new_eq <- paste("y =", round(coef(reg_new)[2], 2), "x +", round(coef(reg_new)[1], 2))
  pepe <- rbind(pepe, data.frame(Equation = new_eq, `R-squared` = new_r_squared))
  
  # 判断是否继续迭代
  if (new_r_squared > r_squared) {
    r_squared <- new_r_squared
    current_data <- new_data  # 更新数据集用于下一次迭代
  } else {
    break  # R²不再提升,停止循环
  }
}

# 输出所有结果
print(pepe)

关键修改说明

  1. 迭代逻辑修正:用current_data存储当前迭代的数据集,每次循环基于上一次的结果裁剪,而非重复从原始数据开始。
  2. 正确裁剪方式:直接对Ctem取[-1](删除首个值)、对第4列取[-nrow(current_data)](删除最后一个值),确保两行列数完全一致。
  3. 防御性检查:添加行列数一致性校验,避免意外报错。
  4. 初始结果记录:将初始回归结果存入pepe表格,方便对比每次优化的效果。
  5. 清理无用依赖:移除未使用的readr包加载语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:22:42