I cicli sono uno dei concetti base della pro­gram­ma­zio­ne. La loro funzione è con­sen­ti­re l’ese­cu­zio­ne ripetuta di de­ter­mi­na­te parti di codice in presenza di una data con­di­zio­ne. I cicli while in R per­met­to­no di ripetere una sezione di programma fino a quando la con­di­zio­ne pre­ce­den­te­men­te spe­ci­fi­ca­ta diventa falsa.

A cosa servono i cicli while in R?

I cicli while sono uti­liz­za­ti per eseguire ri­pe­tu­ta­men­te il codice di programma secondo una data con­di­zio­ne. Finché la con­di­zio­ne è valida, il codice che si trova nel blocco di codice del ciclo while continua a essere eseguito.

I cicli sono uti­liz­za­ti spesso nella pro­gram­ma­zio­ne in R per ef­fet­tua­re l’ite­ra­zio­ne di elementi di una lista in R e quindi eseguire de­ter­mi­na­te ope­ra­zio­ni per ciascun elemento di tale lista. Ad esempio, in questo modo è possibile vi­sua­liz­za­re sullo schermo ciascuna stringa di una lista di stringhe in R. I cicli while in R sono uti­liz­za­ti anche per l’ese­cu­zio­ne con­di­zio­na­le di codice. Inoltre, il ciclo while è la base per l’im­ple­men­ta­zio­ne di molti algoritmi di or­di­na­men­to ben noti, che per­met­to­no di ordinare un insieme di dati in base a de­ter­mi­na­ti criteri.

Struttura e sintassi dei cicli while in R

La sintassi dei cicli while in R è simile alla struttura dei cicli while nella maggior parte degli altri linguaggi di pro­gram­ma­zio­ne. Nell’in­te­sta­zio­ne del ciclo, in­tro­dot­ta dalla parola chiave while, si indica la con­di­zio­ne tra parentesi tonde. La con­di­zio­ne deve essere vera perché il corpo del ciclo venga eseguito. Questo corpo non è altro che un proprio blocco di codice che segue l’in­te­sta­zio­ne ed è racchiuso tra parentesi graffe.

Un esempio è utile per de­scri­ve­re la sintassi. Il seguente esempio di ciclo in R mostra un ciclo while che emette i valori da 1 a 10:

x <- 1
while (x <= 10) {
    print(x)
    x <- x + 1
}
R

Esempio: bub­ble­sort in R

Bub­ble­sort è un classico algoritmo di or­di­na­men­to, uti­liz­za­to per mettere in ordine crescente gli elementi di un vettore o di un array in R. In questo algoritmo di or­di­na­men­to si utilizza un ciclo while per eseguire il codice di or­di­na­men­to fino a quando tutti gli elementi del vettore sono messi in ordine:

bubblesort <- function(x) {
    swapped <- TRUE
    n <- length(x) - 1
    while (swapped) {
        swapped <- FALSE
        for (i in 1:n) {
            if (x[i] > x[i+1]) {
                tmp <- x[i]
                x[i] <- x[i+1]
                x[i+1] <- tmp
                swapped <-TRUE
                }
        }
    }
    return(x)
}
R

Il codice pre­ce­den­te crea una funzione in R di nome bub­ble­sort che permette di ordinare un vettore numerico in ordine crescente. Il ciclo while serve a eseguire la procedura di so­sti­tu­zio­ne alla base di bub­ble­sort fino a com­ple­ta­re l’or­di­na­men­to.

In­ter­ru­zio­ne di un ciclo while in R

Per chiudere an­ti­ci­pa­ta­men­te un ciclo while in presenza di una data con­di­zio­ne puoi uti­liz­za­re la parola chiave break. Con questa parola chiave il ciclo viene ab­ban­do­na­to e non più eseguito. Un esempio di ap­pli­ca­zio­ne di break è il seguente:

x <- 10
while (x >= 0) {
    print(x)
    if (x == 5) {
        break
        }
        x <- x - 1
}
R

Il ciclo pre­ce­den­te mostra i numeri da 10 a 5 sullo schermo. Quando la variabile x raggiunge il valore 5, viene eseguita la con­di­zio­ne if di R e il ciclo viene concluso in anticipo ri­chia­man­do l’istru­zio­ne break.

Altri cicli in R

Il ciclo while in R non è l’unica forma di cicli in R. Esistono anche il ciclo for, con­si­de­ra­to spesso come una sorta di ciclo contatore, e il ciclo repeat, che serve a eseguire il codice più volte in­di­pen­den­te­men­te da una con­di­zio­ne. Per uscire dai cicli repeat è ne­ces­sa­rio usare la parola chiave break, al­tri­men­ti diventano cicli continui.

Ciclo for in R

I cicli for si uti­liz­za­no quando il numero di ite­ra­zio­ni non è noto in anticipo. Il numero di ite­ra­zio­ni viene quindi indicato espli­ci­ta­men­te nell’in­te­sta­zio­ne del ciclo. Un ciclo for che mostra i numeri da 1 a 5 si presenta così:

for (z in 1:5) {
print(i)
}
R

Ciclo repeat in R

I cicli repeat in R si uti­liz­za­no per eseguire il codice più volte in­di­pen­den­te­men­te da una con­di­zio­ne. Se non hai appena iniziato a studiare la pro­gram­ma­zio­ne, pro­ba­bil­men­te conosci già i cicli do-while da altri linguaggi di pro­gram­ma­zio­ne. In R non esiste un vero e proprio ciclo do-while che esegua un blocco di codice almeno una volta. Tuttavia, puoi im­ple­men­ta­re fa­cil­men­te questa fun­zio­na­li­tà con i cicli repeat:

x <- 1
repeat {
    print(x)
    if (x >= 10) {
        break
        }
x <- x + 1
}
R

L’esempio di codice pre­ce­den­te mostra i numeri da 1 a 10 sullo schermo. Il codice, che deve essere eseguito almeno una volta (e che in un classico ciclo do-while si tro­ve­reb­be nel “blocco di codice do”), viene eseguito prima dell’istru­zio­ne if, che chiude il ciclo quando la con­di­zio­ne indicata è valida.

Vai al menu prin­ci­pa­le