如何在R语言的for循环中条件性修改迭代器值以跳过部分迭代?
问题解决:R中for循环条件性跳过迭代
R里的for循环是按预定义序列依次取值的,你手动修改i的话,只会在当前迭代生效,下一次还是会取序列里的下一个数,所以原来的代码达不到跳过的效果。如果想在for循环里实现条件性跳过部分迭代,可以用一个「跳过计数器」配合next语句来实现,不用换while循环。
修正后的代码
ranPick <- numeric(100) skip <- 0 # 记录需要跳过的迭代次数 for (i in 1:100) { # 如果还有需要跳过的次数,就跳过当前迭代并减少计数 if (skip > 0) { skip <- skip - 1 next } ranPick[i] <- round(rnorm(1, 1, 5)) if (ranPick[i] < 0) { # 避免超出向量长度(比如i=99时,i+2=101超过100) end_pos <- min(i + 2, 100) ranPick[i:end_pos] <- ranPick[i] # 设置需要跳过接下来2次迭代 skip <- 2 } }
原理说明
- 用
skip变量记录需要跳过的后续迭代次数,初始为0。 - 每次循环先检查
skip:如果大于0,就减少计数并执行next跳过当前迭代,相当于跳过这一轮的处理。 - 当生成负数时,给后续位置赋值,同时把
skip设为2,这样接下来两次循环都会直接跳过,不会重复生成随机数。
内容的提问来源于stack exchange,提问作者Rel_Ai
相关产品推荐
相关产品推荐

