3.1 Il ciclo for
Il ciclo for
è una struttura di controllo iterativa che determina l’esecuzione di una porzione di codice ripetuta per un certo numero noto di volte. Il linguaggio R
usa la seguente sintassi per il ciclo for
:
for
(indice
in valori_indice
) {
operazioni
}
il che significa “esegui le operazioni operazioni per i diversi valori di indice
compresi nel vettore valori_indice
”. Per esempio, il seguente ciclo for
non fa altro che stampare il valore della variabile contatore in ciascuna esecuzione del ciclo:
Un esempio (leggermente) più complicato è il seguente:
x_list <- seq(1, 9, by = 2)
x_list
#> [1] 1 3 5 7 9
sum_x <- 0
for (x in x_list) {
sum_x <- sum_x + x
cat("L'indice corrente e'", x, "\n")
cat("La frequenza cumulata e'", sum_x, "\n")
}
#> L'indice corrente e' 1
#> La frequenza cumulata e' 1
#> L'indice corrente e' 3
#> La frequenza cumulata e' 4
#> L'indice corrente e' 5
#> La frequenza cumulata e' 9
#> L'indice corrente e' 7
#> La frequenza cumulata e' 16
#> L'indice corrente e' 9
#> La frequenza cumulata e' 25
Per esempio, quanti numeri pari sono contenuti in un vettore? La
risposta a questa domanda viene fornita dalla funzione
countEvenNumbers()
che possiamo definire come indicato qui sotto:
countEvenNumbers <- function(x) {
count <- 0
for (i in 1:length(x)) {
if (x[i] %% 2 == 0) {
count <- count + 1
}
}
count
}
Nella funzione countEvenNumbers()
abbiamo inizializzato la variabile
count
a zero. Prima dell’esecuzione del ciclo for
, dunque, count
vale zero. Il ciclo for
viene eseguito tante volte quanti sono gli
elementi che costituiscono il vettore x
. L’indice i
dunque assume
valori compresi tra 1 e il valore che corrisponde al numero di elementi
di x
. L’operazione modulo, indicato con %%
dà come risultato il
resto della divisione euclidea del primo numero per il secondo. Per
esempio, 9 %% 2
dà come risultato \(1\) perché questo è il resto della
divisione \(9/2\). L’operazione modulo dà come risultato \(0\) per tutti i
numeri pari. In ciascuna esecuzione del ciclo for
l’operazione modulo
viene eseguita, successivamente, su uno degli elementi di x
. Se
l’operazione modulo dà \(0\) come risultato, ovvero se il valore
considerato è un numero pari, allora la variabile count
viene
incrementata di un’unità. L’istruzione return()
ritorna il
numero di valori pari contenuti nel vettore di input alla funzione.
Si noti che è necessario usare return()
: la funzione ritornerà qualunque cosa sia stampato nell’ultima riga della funzione stessa.
Facciamo un esempio: