Цикл For в R с примерами для списка и матрицы

Цикл for очень полезен, когда нам нужно перебрать список элементов или диапазон чисел. Цикл можно использовать для перебора списка, фрейма данных, вектора, матрицы или любого другого объекта. Фигурные и квадратные скобки обязательны.

В этом уроке мы узнаем,

Синтаксис цикла и примеры

For (i in vector) {
    Exp	
}

Здесь,

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

Цикл for в R
Цикл for в R

Давайте посмотрим несколько примеров.

Цикл For в R, пример 1: мы перебираем все элементы вектора и печатаем текущее значение.

# Create fruit vector
fruit <- c('Apple', 'Orange', 'Passion fruit', 'Banana')
# Create the for statement
for ( i in fruit){ 
 print(i)
}

Вывод:

## [1] "Apple"
## [1] "Orange"
## [1] "Passion fruit"
## [1] "Banana"

Цикл For в R, пример 2: создает нелинейную функцию, используя полином x от 1 до 4, и мы сохраняем ее в списке

# Create an empty list
list <- c()
# Create a for statement to populate the list
for (i in seq(1, 4, by=1)) {
  list[[i]] <- i*i
}
print(list)

Вывод:

## [1]   1  4 9 16

Цикл for очень полезен для задач машинного обучения. После того, как мы обучили модель, нам необходимо ее регуляризировать, чтобы избежать переобучения. Регуляризация — очень утомительная задача, поскольку нам нужно найти значение, которое минимизирует функцию потерь. Чтобы помочь нам обнаружить эти значения, мы можем использовать цикл for для перебора диапазона значений и определения лучшего кандидата.

Для цикла по списку

Перебирать список так же просто и удобно, как и перебирать вектор. Давайте посмотрим пример

# Create a list with three vectors
fruit <- list(Basket = c('Apple', 'Orange', 'Passion fruit', 'Banana'), 
Money = c(10, 12, 15), purchase = FALSE)
for (p  in fruit) 
{ 
	print(p)
}

Вывод:

## [1] "Apple" "Orange" "Passion fruit" "Banana"       
## [1] 10 12 15
## [1] FALSE

Для цикла по матрице

Матрица имеет двумерные строки и столбцы. Чтобы перебирать матрицу, нам нужно определить два цикла for: один для строк, а другой для столбца.

# Create a matrix
mat <- matrix(data = seq(10, 20, by=1), nrow = 6, ncol =2)
# Create the loop with r and c to iterate over the matrix
for (r in 1:nrow(mat))   
    for (c in 1:ncol(mat))  
         print(paste("Row", r, "and column",c, "have values of", mat[r,c]))  

Вывод:

## [1] "Row 1 and column 1 have values of 10"
## [1] "Row 1 and column 2 have values of 16"
## [1] "Row 2 and column 1 have values of 11"
## [1] "Row 2 and column 2 have values of 17"
## [1] "Row 3 and column 1 have values of 12"
## [1] "Row 3 and column 2 have values of 18"
## [1] "Row 4 and column 1 have values of 13"
## [1] "Row 4 and column 2 have values of 19"
## [1] "Row 5 and column 1 have values of 14"
## [1] "Row 5 and column 2 have values of 20"
## [1] "Row 6 and column 1 have values of 15"
## [1] "Row 6 and column 2 have values of 10"