Como criar um loop for aninhado em r (incluindo exemplos)


Um loop for aninhado permite iterar elementos em vários vetores (ou múltiplas dimensões de uma matriz) e executar determinadas operações.

A estrutura básica de um loop for em R é:

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

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

E a estrutura básica de um loop for aninhado é:

 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

Este tutorial mostra alguns exemplos de criação de loops for aninhados em R.

Exemplo 1: loop For aninhado em R

O código a seguir mostra como usar um loop for aninhado para preencher os valores de uma matriz 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

Exemplo 2: loop For aninhado em R

O código a seguir mostra como usar um loop for aninhado para elevar ao quadrado cada valor em um quadro de dados:

 #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

Uma nota sobre looping

Em geral, loops for aninhados funcionam bem em pequenos conjuntos de dados ou matrizes, mas tendem a ser bastante lentos com dados maiores.

Para big data, a família de funções do aplicativo tende a ser muito mais rápida, e o pacote data.table possui muitas funções integradas que funcionam com eficiência em conjuntos de dados maiores.

Recursos adicionais

Como iterar sobre nomes de colunas em R
Como adicionar linhas a um quadro de dados em R

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *