Le strutture di controllo in R consentono di controllare il flusso di esecuzione del programma, in base alle condizioni a runtime in maniera non dissimile da qualsiasi altro linguaggio imperativo (come C,Java,Python), vediamo velocemente le parole riservate dedicate alle strutture di controllo
if
,else
: test di una condizionefor
: esecuzione di un ciclo per un numero prefissato di voltewhile
: esecuzione di un ciclo mentre/fintanto che condizione è verarepeat
: esecuzione di un ciclo infinitobreak
: interrompe l’esecuzione di un ciclonext
: salta un iterazione di un ciclo (il continue del C o Java per intenderci)return
: esce da una funzione o ciclo
La maggior parte delle strutture di controllo non sono utilizzate in sessioni interattive , ma piuttosto durante la scrittura di funzioni o espressioni più lunghe. Vediamo in dettaglio i vari costrutti.
if,else
if(<condizione>) {
# fa qualcosa ramo if
} else {
# fa qualcosa ramo else
}
if(<condizione1>) {
# fa qualcosa se condizione 1
} else if(<condizione2>) {
# fa qualcosa se condizione 2
} else {
# fa qualcosa in tutti gli altri casi
}
Un esempio di if else
if(x > 10) {
y <- 0
} else {
y <- 1
}
for
Il for usa una variabile come iteratore (la variabile i nell’esempio) e ne assegna i valori successivi da una sequenza o vettore. I for sono comunemente utilizzati per l’iterazione sugli elementi di un oggetto (elenco,vector , etc. )
for(i in 1:10) {
print(i)
}
Questo ciclo prende la variabile i e in ogni iterazione del ciclo usa i suoi valori 1, 2, 3, …, 10, ed esce
questi 3 cicli hanno lo stesso comportamento
x <- c("a", "b", "c", "d")
for(i in 1:4) {
print(x[i])
}
for(i in seq_along(x)) {
print(x[i])
}
for(letter in x) {
print(letter)
}
for(i in 1:4) print(x[i])
i cicli for possono ovviamente essere nidificati come in qualsiasi altro linguaggio di programmazione.
x <- matrix(1:6, 2, 3)
for(i in seq_len(nrow(x))) {
for(j in seq_len(ncol(x))) {
print(x[i, j])
}
}
e allo stesso modo è necessario fare attenzione nel nidificare per più di 3 o 4 livelli in quanto rende spesso illeggibile un frammento di codice.
while
I cicli while iniziano testando una condizione, se è vera, allora eseguono il corpo del ciclo. Una volta che il ciclo corpo viene eseguita , viene provata la condizione di nuovo , e così via .
count <- 0
while(count < 10) {
print(count)
count <- count + 1
}
repeat
repeat
avvia un ciclo infinito ; L’unico modo per uscire da un ciclo repeat è quello di chiamare break
.
repeat {
x <- f()
if(x<10) {
break
} else {
x <- x-1
}
}
next, return
next è usato per saltare un iterarazione di un loop
for(i in 1:100) {
if(i <= 20) {
## salta 20 iterazioni
next
}
## non fa nullla
}
return segnala che una funzione è terminata è deve tornare un valore