跳过for循环中的迭代

时间:2018-04-27 13:38:39

标签: r for-loop

我试图在for循环中跳过一些迭代:

Lines <- "
 time   Temperature
  1         38.3
  2         38.5
  3         38.9
  4         40.1
  5         38.0
  6         38.6
  7         37.9
  8         38.2
  9         37.5
  10        38.0"
DF <- read.table(text = Lines, header = TRUE)

for (i in unique(DF$time)){
 ix=which(i==DF$time)
 if(DF$Temperature[ix] > 38.65)  ix=ix+3
 print(ix)
}

但我没有得到所需的输出。它不会跳过迭代。相反,它只是覆盖它,以便我得到一些迭代两次。

输出:

[1] 1
[1] 2
[1] 6
[1] 7
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10

期望的输出:

[1] 1
[1] 2
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10

更新

i=1
while(i<=DF$time){
  if(DF$Temperature[i] > 38.65){  
    print(i)
    i=i+3}
    i=i+1
}

这就是我的尝试。但显然它错了。从未使用过。有人能帮助我吗?

2 个答案:

答案 0 :(得分:2)

我认为你在R中混淆了forwhile条款。这基本上就是你要做的事情:

ix <- 1
while(ix <= 10) {
  if (DF$Temperature[ix] > 38.65) {
    ix = ix + 3
    print(ix)
  } else{
    print(ix)

  }
  ix = ix + 1
}

使用@ jogo的更正编辑

答案 1 :(得分:0)

根据您的输入,只有第3和第4个索引具有DF $ Temperature&gt; 38.65比较给出结果,休息是假的。

R比较38.6&gt; 38.65将给出等于false的结果。

所以,

   DF$Temperature > 38.65
   [1] FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

所以你的输出是根据这里的逻辑,第3和第4个索引增加3。

[1] 1
[1] 2
[1] 6 # index3 +3
[1] 7 # index 4 +3
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10