[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.