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
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