Урок 1 Циклы for, while и repeat
1.1 Описание
1Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций.
В повседневной жизни мы тоже ежедневно сталкиваемся с циклами. Например, вам необходимо перенести из кухни в комнату 5 больших коробок с посудой, за один раз вы можете поднть только одну коробку. Т.е. вам понадобится пять раз выполнить одно и тоже дейтсвие, это и есть цикл, а перенос одной коробки это одна итерация цикла.
Первый урок курса поможет вам разобраться с тем:
- Что такое циклы;
- Какие циклы есть в базовом синтаксисе языка R;
- Как итерироваться циклами по наиболее распространённым структурам данных в R;
- Как правильно объединять результаты полученные на разных итерациях цикла;
- Как использовать операторы
next
иbreak
.
Данный урок расчитан на начальный уровень подготовки, и является достаточно базовым.
1.3 Тайм коды
00:00 Введение.
00:28 Что такое циклы
00:58 Какие циклы есть в языке R.
01:44 Синтаксис цикла for
.
02:40 Перебираем вектор циклом for
.
03:34 Переход на следующую итерацию цикла с помощью оператора next
.
04:50 Перебираем список циклом for
.
06:52 Перебираем циклом for
столбцы и строки таблиц (data.frame
).
09:38 Вложенные циклы for
.
10:55 Как правильно объединять в цикле таблицы. Считываем циклом данные из множества csv файлов и объединяем в один data.frame
.
14:11 Синтаксис цикла while
.
15:25 Выход из цикла с помощью оператора break
.
17:12 Синтаксис цикла repeat
.
18:30 В чём разница между циклами while
и repeat
в языке R.
19:47 Почему в R не принято использовать циклы.
21:17 Заключение.
1.4 Код
# циклы в базовом синтаксисе R
# for ---------------------------------------------------------------------
## выполняется до тех пор,
## пока в итерируем оъекте не будут перебраны
## все элементы
## итерирование по вектору
week <- c('Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday')
for ( day in week ) {
print(n)
Sys.sleep(0.25)
}
## итерирование по списку
persons <- list(
list(name = "Alexey", age = 36),
list(name = "Justin", age = 27),
list(name = "Piter", age = 22),
list(name = "Sergey", age = 39))
## оператор next позволяет переходить на следующую итерацию
for ( person in persons ) {
if ( person$age < 30 ) next
print( paste0( person$name, " is ", person$age, " years old") )
}
## итерирование по таблицам
for ( col in mtcars ) {
print(mean(col))
names(col)
}
## итерирование по строкам таблицы
for ( row in 1:nrow(mtcars) ) {
print(mtcars[row, c('cyl', 'gear')])
}
## вложенные циклы for
x <- 1:5
y <- letters[1:5]
for ( int in x ) {
for ( let in y ) {
print(paste0(int, ": ", let))
}
}
## как поступить если мне надо на каждой итерации объединять таблицы
setwd('docs')
files <- dir()
result <- list()
for ( file in files ) {
temp_df <- read.csv(file)
result <- append(result, list(temp_df))
}
# объединяем результаты в одну таблицу
result <- do.call('rbind', result)
# while -------------------------------------------------------------------
## итерируется до тех пор,
## пока истинно заданное условие
x <- 1
while ( x < 10 ) {
print(x)
x <- x + 1
}
# оператор break
x <- 1
while ( x < 20 ) {
print(x)
if ( x / 2 == 5 ) break
x <- x + 1
}
# repeate -----------------------------------------------------------------
## итерируется до тех пор,
## пока не встретит break
x <- 1
repeat {
print(x)
if (x / 2 == 5) break
x <- x + 1
}