Annidato per loop in R

Jinku Hu 14 luglio 2021
  1. bucle for nel linguaggio R
  2. Usa il cicli for annidato per iterare sugli elementi della matrice in R
Annidato per loop in R

Questo articolo introdurrà i cicli for annidati in R.

bucle for nel linguaggio R

Il cicli for è disponibile in linguaggio R con un’euristica simile a quella della maggior parte dei linguaggi di programmazione. Ripete più volte il blocco di codice specificato. La sintassi del cicli for è la seguente.

for (item in set) {}

item è un oggetto che memorizza l’elemento iterato dal set. Il cicli for non restituisce l’output, quindi dobbiamo chiamare la funzione print per restituire il valore word ad ogni iterazione.

vec1 <- c("ace", "spades", "king", "spades", "queen", "spades", "jack",
           "spades", "ten", "spades")

for (word in vec1) {
  print(word)
}

Produzione:

[1] "ace"
[1] "spades"
[1] "king"
[1] "spades"
[1] "queen"
[1] "spades"
[1] "jack"
[1] "spades"
[1] "ten"
[1] "spades"

Possiamo anche implementare il cicli for, in cui l’indice è esposto come variabile. In questo caso, la funzione length viene utilizzata per calcolare la dimensione del vettore vec1 e iterare dal primo elemento alla fine. Nota che la notazione 1: è importante e specifica l’inizio dell’intervallo. Il seguente codice di esempio crea un vettore stringa copiato su un altro vettore della stessa dimensione utilizzando il cicli for.

vec1 <- c("ace", "spades", "king", "spades", "queen", "spades", "jack",
           "spades", "ten", "spades")

vec2 <- vector(length = length(vec1))

for (i in 1:length(vec1)) {
  vec2[i] <- vec1[i]
}
vec2

Produzione:

[1] "ace"    "spades" "king"   "spades" "queen"  "spades" "jack"   "spades" "ten"   
[10] "spades"

Usa il cicli for annidato per iterare sugli elementi della matrice in R

I cicli annidati possono essere implementati utilizzando la struttura del cicli for. Questo può essere utilizzato per scorrere gli elementi della matrice e inizializzarli con valori casuali. Si noti che la notazione generale è la stessa dell’esempio precedente, tranne per il fatto che la fine dell’intervallo viene calcolata con le funzioni nrow e ncol. nrow e ncol restituiscono rispettivamente il numero di righe o colonne dell’array.

mat1 <- matrix(0, nrow = 5, ncol = 5)
for (i in 1:nrow(mat1)) {
  for (j in 1:ncol(mat1)) {
    mat1[i, j] <- sample(1:100, 1, replace=TRUE)
  }
}
mat1

Produzione:

[,1] [,2] [,3] [,4] [,5]
[1,]   13   14   13   67   98
[2,]   28   50   23   55    9
[3,]    3   65   99   17   93
[4,]   18    6   20   50   46
[5,]   51   76   33   26    3

Tuttavia, la struttura del bucle annidato funziona correttamente nel codice di esempio precedente. L’inizializzazione della matrice viene eseguita meglio utilizzando la funzione sample concatenata direttamente come primo argomento della funzione matrix, come mostrato nel frammento seguente.

mat2 <- matrix(sample(1:100, 25, replace = TRUE), ncol = 5)
mat2

Produzione:

[,1] [,2] [,3] [,4] [,5]
[1,]   85   19   26   53   88
[2,]   44   50   66   96   56
[3,]   42   46   37   19   66
[4,]   43   23   13   32   67
[5,]   56   51   21    2   56
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - R Loop