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

R语言for循环仅输出最终值,迭代结果存入matrix矩阵出错求助

问题原因

  • 赋值索引错误:你在循环中使用mat2[1,]的写法对矩阵赋值,逗号后留空代表选中第一行的所有列,因此每轮循环都会把第一行全部覆盖为当前迭代的计算结果,运行完所有循环后,矩阵所有列都会保留最后一轮迭代的数值,就是你看到的全列一致的情况。
  • 数据存储逻辑错误:insurer[i]和reinsurer[i]的写法有误,每轮simdata<=M筛选出的是长度不定的向量,用[i]索引只会保留该向量的第i个元素,后续你直接对insurer整体求均值,计算逻辑本身也是错误的。

修正后代码

如果不需要留存每轮的切分数据,可以直接用临时变量存储当前迭代的筛选结果,仅对矩阵的第i列赋值即可:

mat2 <- matrix(data = NA, nrow = 4, ncol = 10, byrow = TRUE)
for(i in 1:10){
  M <- 5000*i
  cur_insurer <- simdata[simdata <= M]
  cur_reinsurer <- simdata[simdata > M]
  mat2[1, i] <- mean(cur_insurer)
  mat2[2, i] <- mean(cur_reinsurer)
  mat2[3, i] <- var(cur_insurer)
  mat2[4, i] <- var(cur_reinsurer)
}
mat2

如果后续需要使用每轮的切分数据,可以把临时变量换成列表存储:

mat2 <- matrix(data = NA, nrow = 4, ncol = 10, byrow = TRUE)
insurer_list <- list()
reinsurer_list <- list()
for(i in 1:10){
  M <- 5000*i
  insurer_list[[i]] <- simdata[simdata <= M]
  reinsurer_list[[i]] <- simdata[simdata > M]
  mat2[1, i] <- mean(insurer_list[[i]])
  mat2[2, i] <- mean(reinsurer_list[[i]])
  mat2[3, i] <- var(insurer_list[[i]])
  mat2[4, i] <- var(reinsurer_list[[i]])
}
mat2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:09:03