R语言for循环如何跳过取值为0的样本量避免运行报错
R循环跳过size为0的迭代解决方案
核心解决方案
你只需要在拿到当前迭代的samplesize后新增条件判断,值为0时用next关键字直接跳过本次循环的剩余代码即可,修改后代码如下:
for (i in 1:N){ samplesize <- size[i,] # 新增判断:样本量为0时直接进入下一轮迭代 if (samplesize == 0) { next } # 修正原笔误:参数ncos应为ncol store <- matrix(data = NA, nrow = samplesize, ncol = N) # 生成随机数,修正原逻辑问题:原赋值给store[,i]会重复覆盖同一列 for (a in 1:N){ store[,a] <- rnorm(n = samplesize, mean = avg, sd = stdvn) } # 你后续的store数值相加逻辑放在此处即可 }
next是R循环的内置关键字,触发后会直接终止当前轮次的循环,不会执行后续创建矩阵、生成随机数的逻辑,完全不会产生额外数值,也不会触发0行矩阵/n=0的报错。
优化方案(更高执行效率)
你也可以提前筛选出size中不为0的索引,仅遍历这些有效索引,省去循环内的判断步骤:
# 提前筛选非0的索引 valid_idx <- which(size != 0) for (i in valid_idx){ samplesize <- size[i,] store <- matrix(data = NA, nrow = samplesize, ncol = N) for (a in 1:N){ store[,a] <- rnorm(n = samplesize, mean = avg, sd = stdvn) } # 后续计算逻辑 }
内容的提问来源于stack exchange,提问作者gir emee
相关产品推荐
相关产品推荐

