Loops er et af de grund­læg­gen­de begreber inden for pro­gram­me­ring. De sikrer, at bestemte ko­de­pas­sa­ger udføres gentagne gange under en bestemt be­tin­gel­se. Med while-loops i R gentages et afsnit, indtil den tidligere angivne be­tin­gel­se bliver falsk.

Hvad bruges while-løkker i R til?

While-løkker bruges til gentagne gange at udføre en kodeblok afhængigt af en be­tin­gel­se. Så længe denne be­tin­gel­se er sand, udføres koden i while-løkken.

Loops bruges ofte i R-pro­gram­me­ring til at lære om elementer i en R-liste og udføre spe­ci­fik­ke hand­lin­ger på dem in­di­vi­du­elt. For eksempel kan du udskrive en hvilken som helst streng på skærmen fra en liste over R-strenge. Derudover bruges while-loops i R til betinget udførelse af kode. Loops som while-loops er grund­la­get for mange kendte sor­te­rings­al­go­rit­mer, der or­ga­ni­se­rer en database efter bestemte kriterier.

Struktur og syntaks for while-løkker i R

Syntaksen for while-løkker i R ligner syntaksen for while-løkker i de fleste andre pro­gram­me­rings­sprog. I løk­ke­over­skrif­ten, der indledes med nøg­le­or­det while, angives be­tin­gel­sen i parentes. Sidst­nævn­te skal være sand for, at løk­ke­hul­let kan udføres. Dette hull er intet andet end sin egen kodeblok efter løk­ke­over­skrif­ten, omgivet af krøllede pa­ren­te­ser.

For at il­lu­stre­re dette har vi lavet et eksempel. Dette R-loop-eksempel viser en while-loop, der udskriver værdier fra 1 til 10:

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

Bubb­lesort i R-eksempel

Bubb­lesort er en klassisk sor­te­rings­al­go­rit­me, der bruges til at sortere elementer i en R-vektor eller en matrix i R i stigende ræk­ke­føl­ge. I denne sor­te­rings­al­go­rit­me bruges en while-loop til at udføre sor­te­rings­ko­den, indtil alle elementer i vektoren er sorteret:

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

I oven­stå­en­de kode oprettes en R-funktion kaldet bubb­lesort. Dette sikrer, at en numerisk vektor sorteres i stigende ræk­ke­føl­ge. While-løkken bruges til at udføre ud­veks­lings­pro­ces­sen, som er afgørende for Bubb­lesort, indtil sor­te­rin­gen er afsluttet.

Afbryd while-løkken i R

For at afslutte en while-loop før tid under en bestemt be­tin­gel­se kan du bruge nøg­le­or­det ‘break’. Dette sikrer, at loopen forlades og ikke ge­nind­træ­des. Her er et eksempel på ‘break’-sætningen for at forklare:

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

Oven­stå­en­de løkke viser tal fra 10 til 5 på skærmen. Når variablen ‘x’ når værdien 5, udføres R ‘if’-be­tin­gel­sen, og løkken afsluttes før tid ved at kalde ‘break’.

Andre sløjfer i R

While-løkken i R er ikke den eneste type løkke i R. Der findes også for-løkken, som ofte betragtes som en slags tæl­leløk­ke, og repeat-løkken, som bruges til at udføre kode flere gange, uanset be­tin­gel­sen. Repeat-løkker skal afsluttes med nøg­le­or­det ‘break’, ellers er de uendelige løkker.

For-løkke i R

For-løkker bruges, når antallet af ite­ra­tio­ner er kendt på forhånd. Antallet af ite­ra­tio­ner angives eksplicit i løk­ke­over­skrif­ten. En for-løkke, der udskriver tal fra 1 til 5, ser således ud:

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

Gentag løkke i R

Gen­ta­gel­ses­sløj­fer i R bruges til at udføre kode flere gange, uanset en be­tin­gel­se. Hvis du ikke lige er begyndt at pro­gram­me­re, er du sand­syn­lig­vis bekendt med do-while-sløjfer fra andre pro­gram­me­rings­sprog som Java. Der er ingen eksplicit do-while-sløjfe i R, hvor en kodeblok udføres mindst én gang. Men funk­tio­na­li­te­ten kan nemt im­ple­men­te­res med gen­ta­gel­ses­sløj­fer:

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

Oven­stå­en­de ko­de­ek­sem­pel udskriver tal fra 1 til 10. Koden udføres mindst én gang (i en klassisk do-while-løkke i ‘do-ko­de­blok­ken’) før ‘if’-sætningen, som afslutter løkken, hvis den angivne be­tin­gel­se er sand. be736e550b1141b116c6745223aecfd7

477344ec9f8391083178b3d7103c9090

Gå til ho­ved­me­nu­en