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

R语言循环中b被赋值为29的原因?索引与向量长度不匹配排查

R循环索引错误导致数据框行数不匹配问题

修改后的循环代码

n_range <- 4:29
bResultsStra <- vector("double", 27)
for (b in n_range) { 
  bRowsStra<-Stratified[sample(nrow(Stratified), b), ]
  base <- read.table("base.csv", header=T, sep=",")
  base$area<-5036821
  base$quadrea <- base$area * 16
  bootStra <- boot(data=bRowsStra$count, average, R=1000)
  base$data<- bootStra$t
  base$popsize<-(base$data*base$quadrea)
  basesortStra <- base[order(base$popsize),]
  bValue <- basesortStra$popsize[975] - basesortStra$popsize[25]
  bResultsStra[[b - 1]] <- bValue
}

原始代码片段(修改前)

n_range <- 2:29
bResultsStra <- vector("double", 29)

遇到的错误

运行后尝试将结果存入data.frame时触发错误:

Error in data.frame(n = n_range, bResultsStra) :
arguments imply differing number of rows: 26, 28

问题原因分析

  1. 向量长度初始偏差:n_range <- 4:29的实际长度是26(29-4+1=26),但手动创建的bResultsStra长度设为27,从一开始就不匹配。
  2. 索引赋值逻辑错误:循环中用bResultsStra[[b - 1]] <- bValue赋值,当b从4开始时,b-1=3,也就是从向量第3位开始写入;当b=29时,b-1=28,但原向量只有27个元素,R会自动把bResultsStra扩展为28个元素——最终导致bResultsStra长度28,n_range长度26,创建数据框时行数不匹配。
  3. 循环变量的正常行为:循环结束后b的值为29L是R的正常机制,循环变量会保留最后一次迭代的取值,并非bug。

修正方案

  1. 动态匹配向量长度:用length(n_range)代替手动计算的数值,确保向量长度和n_range完全一致:
    bResultsStra <- vector("double", length(n_range))
    
  2. 改用循环索引定位:避免用b的值来确定向量位置,改用循环的索引序号,彻底解决偏移问题:
    n_range <- 4:29
    bResultsStra <- vector("double", length(n_range))
    for (i in seq_along(n_range)) { 
      b <- n_range[i]
      bRowsStra<-Stratified[sample(nrow(Stratified), b), ]
      base <- read.table("base.csv", header=T, sep=",")
      base$area<-5036821
      base$quadrea <- base$area * 16
      bootStra <- boot(data=bRowsStra$count, average, R=1000)
      base$data<- bootStra$t
      base$popsize<-(base$data*base$quadrea)
      basesortStra <- base[order(base$popsize),]
      bValue <- basesortStra$popsize[975] - basesortStra$popsize[25]
      bResultsStra[[i]] <- bValue
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:01:09