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
相关产品推荐
相关产品推荐

