Урок 1 Циклы for, while и repeat

1.1 Описание

1Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций.

В повседневной жизни мы тоже ежедневно сталкиваемся с циклами. Например, вам необходимо перенести из кухни в комнату 5 больших коробок с посудой, за один раз вы можете поднть только одну коробку. Т.е. вам понадобится пять раз выполнить одно и тоже дейтсвие, это и есть цикл, а перенос одной коробки это одна итерация цикла.

Первый урок курса поможет вам разобраться с тем:

  • Что такое циклы;
  • Какие циклы есть в базовом синтаксисе языка R;
  • Как итерироваться циклами по наиболее распространённым структурам данных в R;
  • Как правильно объединять результаты полученные на разных итерациях цикла;
  • Как использовать операторы next и break.

Данный урок расчитан на начальный уровень подготовки, и является достаточно базовым.

1.2 Видео

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
}

1.5 Презентация

1.6 Тест