Изменение количества итераций в a для l oop в зависимости от результатов в теле для l oop в R - PullRequest
1 голос
/ 23 января 2020

Вот код, который я пробовал, чтобы изменить мои итерации в для l oop

repscount <- value
for (i in 1:repscount) { 
  ##certain calculations on x
  if (x == 0) {repscount <- repscount + 1} else{}##add x to a list
}

Но мой repscount не увеличивается. Переписывает ли значение repscount? Есть ли другой способ сделать это, не используя какое-то время l oop?

1 Ответ

0 голосов
/ 23 января 2020

ваш код не работает, потому что for сначала проверяет, сколько прогонов он должен выполнить. После изменения repscount функция for никогда больше не проверяет количество итераций, которое она должна выполнить. Этот простой пример показывает, что:

n <- 5
for (i in 1:n) {
  print(i)
  n <- n + 1
}

Итак, сначала оценивается условие внутри for. R знает, что он сделает ровно пять итераций, и делает это. Тот факт, что n изменяется впоследствии, не влияет на это.

Вместо него можно использовать while l oop:

repscount <- value
i <- 1
while (i <= repscount) { 
  ##certain calculations on x
  if (x == 0) {repscount <- repscount + 1} else {}##add x to a list
  i <- i + 1     
}

Здесь, после окончания каждого прогона repscount сравнивается с i, итерация начинается с начала, только если i <= repscount.

...