Пропуск итераций в цикле for - PullRequest
0 голосов
/ 27 апреля 2018

Я попытался пропустить несколько итераций в цикле 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 голосов
/ 27 апреля 2018

Согласно вашим данным, только 3-й и 4-й индексы имеют сравнение DF $ Температура> 38,65, дающее истинный результат, остальное - ложь.

Сравнение R 38,6> 38,65 даст результат, равный ложному.

Итак,

   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
0 голосов
/ 27 апреля 2018

Я думаю, что вы путаете for против while предложений в R. Это в основном то, что вы пытаетесь сделать:

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

  }
  ix = ix + 1
}

отредактировано с исправлением @ jogo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...