根据条件跳过for循环的几次迭代

时间:2017-03-13 15:10:43

标签: r for-loop

我想根据条件跳过for循环中的迭代。直觉上我认为这会起作用:

for(i in 1:10){
  if(i %in% c(1,2,3,4,5)){
    print(i)
    i <- i+2}
}

我希望它返回

1
4

但它会返回

 1
 2
 3
 4
 5

我知道为什么会这样。

是否有其他方法可以根据R?中的for循环中的条件跳过(多次)迭代?

2 个答案:

答案 0 :(得分:2)

在R中循环增加计数器不仅仅是不好的做法。它根本不起作用。这不是语言的构建方式。如果你想打印1和4,请尝试:

for(i in seq(1,10,by=3) ){
  if(i %in% c(1,2,3,4,5)){
    print(i)
  }
}

还要注意for循环实际上返回NULL。打印到控制台会有副作用,但变量值不会改变。如果要更改值,则需要在循环内进行赋值。

next控制声明:

for(i in seq(1,10) ){
  if( !(i %in% c(1,4)) ){ next }
  print(i)
}

答案 1 :(得分:-1)

事实上,根据@a p o m的评论,解决方案毕竟非常简单:

i <- 1
while(i <= 10){
  if(i %in% c(1,2,3,4,5)){
    print(i)
    i <- i+2}
  i <- i+1
}

不敢相信我自己也没有想过这个!