Как создать вложенный цикл for в R (включая примеры)


Вложенный цикл for позволяет перебирать элементы в нескольких векторах (или нескольких измерениях матрицы) и выполнять некоторые операции.

Базовая структура цикла for в R:

for (i in 1:4) {
 print(i)
}

[1] 1
[1] 2
[1] 3
[1] 4

И основная структура вложенного цикла for :

for (i in 1:4) {
 for (j in 1:2) {
 print(i\*j)
 }
}

[1] 1
[1] 2
[1] 2
[1] 4
[1] 3
[1] 6
[1] 4
[1] 8

В этом руководстве показано несколько примеров создания вложенных циклов for в R.

Пример 1. Вложенный цикл For в R

В следующем коде показано, как использовать вложенный цикл for для заполнения значений матрицы 4×4:

#create matrix
empty_mat <- matrix(nrow= 4 , ncol= 4 )

#view empty matrix
empty_mat
 [,1] [,2] [,3] [,4]
[1,] NA NA NA NA
[2,] NA NA NA NA
[3,] NA NA NA NA
[4,] NA NA NA NA

#use nested for loop to fill in values of matrix
for (i in 1:4) {
 for (j in 1:4) {
 empty_mat[i, j] = (i\*j)
 }
}

#view matrix
empty_mat

 [,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 2 4 6 8
[3,] 3 6 9 12
[4,] 4 8 12 16

Пример 2. Вложенный цикл For в R

В следующем коде показано, как использовать вложенный цикл for для возведения в квадрат каждого значения во фрейме данных:

#create empty data frame
df <- data.frame(var1=c(1, 7, 4),
 var2=c(9, 13, 15))

#view empty data frame 
df

 var1 var2
1 1 9
2 7 13
3 4 15

#use nested for loop to square each value in the data frame
for (i in 1:nrow(df)) {
 for (j in 1:ncol(df)) {
 df[i, j] = df[i,j]^2
 }
}

#view new data frame
df

 var1 var2
1 1 81
2 49 169
3 16 225

Заметка о зацикливании

Как правило, вложенные циклы for хорошо работают с небольшими наборами данных или матрицами, но они, как правило, довольно медленны с большими данными.

Для больших данных семейство функций применения, как правило, работает намного быстрее, а пакет data.table имеет множество встроенных функций, которые эффективно работают с большими наборами данных.

Дополнительные ресурсы

Как перебрать имена столбцов в R
Как добавить строки во фрейм данных в R