R Цикл while с примерами программирования
⚡ Умное резюме
Цикл While в языке программирования R повторяет блок кода до тех пор, пока условие остается истинным. Условие проверяется перед каждым проходом, поэтому тело цикла может вообще не выполняться, и что-то внутри него в конечном итоге должно сделать условие ложным.

Цикл while в программировании на R
A в то время как цикл В R блок кода повторяется до тех пор, пока выполняется условие. Условие проверяется. до при каждом проходе, поэтому цикл while может выполниться ноль раз, если условие с самого начала ложно.
Синтаксис цикла while в R
Ниже приведен синтаксис цикла While в программировании на R:
while (condition) {
Exp
}
Блок-схема цикла R While

ВниманиеВнутри цикла должно произойти событие, в конечном итоге приводящее к ложному условию. Если ничего не происходит, цикл выполняется бесконечно, и вам приходится прерывать выполнение программы с помощью клавиши R, нажав Esc или Ctrl+C.
Цикл while, цикл for и цикл repeat в R
В номере R три туалета.ping конструкции, и выбор между ними сводится к тому, знаете ли вы заранее, сколько итераций вам потребуется.
| Критерии | в то время как | для | повторять |
|---|---|---|---|
| Количество итераций | Заранее неизвестно | Известно заранее | Заранее неизвестно |
| Состояние проверено | Перед каждым проходом | Последовательность исчерпана | Никогда, вы должны объявить перерыв. |
| Минимальное количество пробегов | 0 | 0 | Одна |
| Типичное использование | Сходимость к пороговому значению | Обход вектора или списка | логика в стиле "делай пока" |
| Синтаксис | while (cond) { } | for (i in v) { } | повторить { … перерыв } |
# repeat always runs at least once count <- 1 repeat { print(count) count <- count + 1 if (count > 5) break }
Приведенный выше пример с акциями идеально подходит для случая «в то время как»: невозможно заранее знать, сколько случайных выборок потребуется, прежде чем цена упадет до 45.
Цикл While в R: примеры
Пример 1
Начните с самого простого. R программирование Например, вы создаете счетчик и добавляете к нему 1 при каждом проходе. Цикл должен завершаться, поэтому условие явно указывает R остановиться, как только значение переменной превысит 10.
Внимание: Если вы хотите увидеть текущее значение цикла, вам нужно обернуть переменную внутри функции print().
#Create a variable with value 1 begin <- 1 #Create the loop while (begin <= 10){ #See which loop we are on cat('This is loop number', begin, '\n') #add 1 to the variable begin after each loop begin <- begin+1 print(begin) }
Выход:
## This is loop number 1[1] 2 ## This is loop number 2[1] 3 ## This is loop number 3[1] 4 ## This is loop number 4[1] 5 ## This is loop number 5[1] 6 ## This is loop number 6[1] 7 ## This is loop number 7[1] 8 ## This is loop number 8[1] 9 ## This is loop number 9[1] 10 ## This is loop number 10[1] 11
Пример 2
Предположим, вы купили акции по цене 50 долларов. Если цена упадет до 45 долларов или ниже, вы захотите открыть короткую позицию, в противном случае — продолжать держать. Каждый проход цикла случайным образом сдвигает цену на 10 долларов в любом направлении вокруг отметки 50:
set.seed(123) # Set variable stock and price stock <- 50 price <- 50 # Loop variable counts the number of loops loop <- 1 # Set the while statement while (price > 45){ # Create a random price between 40 and 60 price <- stock + sample(-10:10, 1) # Count the number of loop loop <- loop + 1 # Print the number of loop print(loop) }
Выход:
## [1] 2 ## [1] 3 ## [1] 4 ## [1] 5 ## [1] 6 ## [1] 7
cat('it took',loop,'loop before we short the price. The lowest price is',price)
Выход:
## it took 7 loop before we short the price. The lowest price is 40
Как использовать операторы break и next в цикле While
Два ключевых слова изменяют обычный ход выполнения любого цикла в R.
- перерыв немедленно выходит из цикла, пропуститьping каждая оставшаяся итерация.
- следующий Отменяет только текущую итерацию и сразу переходит к следующей проверке условия.
# break: stop as soon as a condition is met i <- 1 while (i <= 100) { if (i * i > 50) { cat('First square above 50 is', i * i, '\n') break } i <- i + 1 } # next: skip the even numbers i <- 0 while (i < 10) { i <- i + 1 if (i %% 2 == 0) next print(i) }
Одна ловушка, о которой стоит знать. В цикле while следующий шаг возвращается к проверке условия. без Если счетчик увеличивается в конце тела цикла, next пропускает это увеличение, и цикл зависает навсегда. Именно поэтому во втором примере происходит увеличение. до следующее утверждение, а не после него.
Распространенные ошибки в циклах While и бесконечные циклы
Почти каждый неудачный цикл while состоит из четырех ошибок.
- Счетчик никогда не обновляется. Если забыть приращение, условие останется истинным навсегда. Чтобы прервать выполнение, нажмите Esc в RStudio или Ctrl+C в терминале.
- Условие возвращает NA. Если какое-либо значение в тесте равно NA, R останавливается с сообщением «отсутствует значение там, где требуется TRUE/FALSE». Защитите это значение с помощью is.na() или isTRUE().
- Условие состоит из более чем одного элемента. Начиная с версии R 4.2, условие длиной более единицы считается ошибкой, а не предупреждением. Оберните его в any() или all().
- Сравнение чисел с плавающей запятой никогда не становится ложным. Цикл while (x != 0.3) может продолжаться бесконечно, потому что 0.1 + 0.2 не равно точно 0.3. Вместо этого используйте допуск abs(x – 0.3) > 1e-8.
# Safety valve: cap the number of iterations iter <- 0 while (price > 45 && iter < 1000) { price <- stock + sample(-10:10, 1) iter <- iter + 1 }
Добавление ограничения на максимальное количество итераций — это недорогая страховка в любом цикле, выход из которого зависит от случайных или внешних данных.
