[1] 2 4 5 7 9 11 14
11 Цикли у R
Цикли у програмуванні використовуються для виконання повторюваних операцій. В R є три типи циклів: for(“R for Loop,” n.d.), while(“R for Loop,” n.d.) та repeat(sabir, n.d.).
11.1 Цикл for
Цикл for у R використовується для повторюваних операцій над елементами вектора. Ми раніше уже використовували вектори для фнших прикладів:
Синтаксис циклу for виглядає наступним чином:
Де value - це змінна, яка буде використовуватись для доступу до елементів вектора sequence. code - це код, який буде виконуватись для кожного елемента вектора sequence.
Для прикладу, давайте знайдемо кількість непарних елементів вектора x:
# створюємо змінну count та присвоюємо їй значення 0
even_count <- 0
# створюємо вектор x
x <- c(2, 4, 5, 7, 9, 11, 14)
for (i in x) {
# якщо елемент i не парний
if (i %% 2 != 0) {
# збільшуємо значення even_count на 1
even_count <- even_count + 1
# виводимо значення i та even_count
print(paste("i: ", i, " | even_count: ", even_count))
}
}[1] "i: 5 | even_count: 1"
[1] "i: 7 | even_count: 2"
[1] "i: 9 | even_count: 3"
[1] "i: 11 | even_count: 4"
[1] 4
У прикладі вище, цикл for виконався 7 разів, бо саме стльіки значень у векторі x. На кожній ітерації циклу змінні i отримує нове значення з вектора x.
Також цикл for можна використовувати для роботи з індексами елементів вектора (або іншої колекції). Розвязати попередній приклад можна також так:
# створюємо змінну count та присвоюємо їй значення 0
even_count <- 0
# створюємо вектор x
x <- c(2, 4, 5, 7, 9, 11, 14)
for (i in 1:length(x)) {
# якщо елемент **x[i]** не парний
if (x[i] %% 2 != 0) {
# збільшуємо значення even_count на 1
even_count <- even_count + 1
# виводимо значення i та even_count
print(paste("i: ", i, " | even_count: ", even_count))
}
}[1] "i: 3 | even_count: 1"
[1] "i: 4 | even_count: 2"
[1] "i: 5 | even_count: 3"
[1] "i: 6 | even_count: 4"
[1] 4
Функція length() повертає довжину вектора/послідовності.
11.2 Цикл while
Цикл while виконується поки вказана умова є істинною, а синтаксис виглядає наступним чином:
де condition - це умова, яка повинна бути істинною, а code - це код, який буде виконуватись поки умова condition є істинною.
Наприклад, виведемо на консоль усі парні числа від 1 до 10:
i <- 1
while(i <= 10) {
# збільшуємо значення i на 1 на кожній ітерації циклу
i <- i + 1
# перевіряємо i на парність
if (i %% 2 == 0) {
print(i)
}
}[1] 2
[1] 4
[1] 6
[1] 8
[1] 10
Використовуючи цикл while Ви моежете виконувати
11.3 Команди break та next
Команди break та next дозволяють виконувати певні дії в циклі.
Так, break зупиняє виконання поточного циклу, а next переходить на виконання наступної ітерації циклу, на виконуючи код після неї.
Розглянемо наступний приклад: потрібно вивести на консоль усі парні числа з поданого вектора x <- c(4, 6, 7, 1, -4, 0, 6, -8), але при цьому пропускати від’ємні числа, а при знаходженні 0 зупинити виконання циклу.
x <- c(4, 6, 7, 1, -4, 0, 6, -8)
for(i in x) {
# якщо i < 0, то переходимо на наступну ітерацію циклу
if(i < 0)
next
# якщо i == 0, то зупиняємо виконання циклу та виводимо повідомлення
if(i == 0) {
print("ZERO!!!")
break
}
# якщо i парне, то виводимо його на консоль
if(i %% 2 == 0)
print(i)
}[1] 4
[1] 6
[1] "ZERO!!!"
11.4 Цикл repeat
Цикл repeat на відміну від for та while зупиняється лише коли виконано команду break та не має жодних умов виходу з нього. Синтаксис виглядає наступним чином:
Приклад використання циклу repeat:
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
У прикладі вище ми вивели на консоль усі числа від 1 до 10.