Zanke so eden od osnovnih pojmov pro­gra­mi­ra­nja. Za­go­ta­vlja­jo, da se določeni deli kode izvajajo večkrat pod določenim pogojem. Pri zankah while v R se del ponavlja, dokler prej določen pogoj ne postane lažen.

Za kaj se v R upo­ra­blja­jo zanke while?

Zankovni cikli se upo­ra­blja­jo za po­na­vlja­jo­če izvajanje bloka kode, odvisno od pogoja. Dokler je ta pogoj izpolnjen, se izvaja koda v zankovnem ciklu.

V pro­gra­mi­ra­nju v jeziku R se zanke pogosto upo­ra­blja­jo za spo­zna­va­nje elementov seznama R in izvajanje posebnih dejanj na njih posamično. Na primer, na zaslonu lahko izpišete kateri koli niz iz seznama nizov R. Poleg tega se zanke while v jeziku R upo­ra­blja­jo za pogojno izvajanje kode. Zanke, kot je zanka while, so osnova mnogih znanih al­go­rit­mov za raz­vr­šča­nje, ki or­ga­ni­zi­ra­jo bazo podatkov po določenih merilih.

Struktura in sintaksa zanke while v R

Sintaksa zanke while v R je podobna sintaksi zanke while v večini drugih pro­gram­skih jezikov. V glavi zanke, ki se uvede s ključno besedo while, je pogoj naveden v oklepajih. Ta pogoj mora biti izpolnjen, da se izvede telo zanke. Telo zanke ni nič drugega kot njen lastni blok kode za glavo zanke, zaprt v oklepajih.

Da bi to po­na­zo­ri­li, smo ustvarili primer. Ta primer R zanke prikazuje zanke while, ki iz­pi­su­je­jo vrednosti od 1 do 10:

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

Primer raz­vr­šča­nja po velikosti v R

Bu­bble­sort je klasični algoritem za raz­vr­šča­nje, ki se uporablja za raz­vr­šča­nje elementov vektorja R ali matrike v R v na­ra­šča­jo­čem vrstnem redu. V tem algoritmu za raz­vr­šča­nje se za izvajanje kode za raz­vr­šča­nje uporablja zanka while, dokler niso raz­vr­šče­ni vsi elementi vektorja:

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

V zgornji kodi je ustvar­je­na funkcija R z imenom bu­bble­sort. Ta za­go­ta­vlja, da je numerični vektor razvrščen v na­ra­šča­jo­čem vrstnem redu. Zankovni ciklus while se uporablja za izvedbo procesa izmenjave, ki je bistven za Bu­bble­sort, dokler raz­vr­šča­nje ni končano.

Pre­ki­ni­tev zanke while v R

Za predčasno izhod iz zanke while pod določenim pogojem lahko uporabite ključno besedo »break«. To zagotovi, da se zanka zapusti in se vanjo ne vstopi ponovno. Tukaj je primer izjave »break« za pojasnilo:

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

Zgornja zanka na zaslonu izpiše številke od 10 do 5. Ko spre­men­ljiv­ka „x“ doseže vrednost 5, se izvede pogoj „if“ v jeziku R in zanka se predčasno prekine s klicem „break“.

Druge zanke v R

Zanka while v R ni edina vrsta zanke v R. Obstaja tudi zanka for, ki se pogosto obravnava kot vrsta štetne zanke, in zanka repeat, ki se uporablja za večkratno izvajanje kode , ne glede na pogoj. Zanke repeat je treba zapreti s ključno besedo »break«, sicer so neskončne zanke.

Za zanko v R

Za zanke se upo­ra­blja­jo, kadar je število ponovitev znano vnaprej. Število ponovitev je izrecno navedeno v glavi zanke. Zanka, ki izpisuje številke od 1 do 5, izgleda takole:

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

Ponovi zanko v R

Po­na­vlja­jo­či se cikli v R se upo­ra­blja­jo za večkratno izvajanje kode, ne glede na pogoj. Če niste ravno začetnik v pro­gra­mi­ra­nju, ste verjetno se­zna­nje­ni s cikli do-while iz drugih pro­gram­skih jezikov, kot je Java. V R ni ek­s­pli­ci­tne­ga cikla do-while, v katerem se blok kode izvede vsaj enkrat. Toda to funk­ci­o­nal­nost je mogoče enostavno im­ple­men­ti­ra­ti s po­na­vlja­jo­či­mi se cikli:

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

Zgornji primer kode izpiše številke od 1 do 10. Koda se izvede vsaj enkrat (v klasični zanki do-while v kodnem bloku »do«) pred izjavo »if«, ki zaključi zanko, če je navedeni pogoj resničen. be736e550b1141b116c6745223aecfd7

d1d76d85f27f41c7f98c49bcb7641848

37b614e8ff1142c9025056cc2b26f936

f73edeee674565a3ba93d621869650b4

Go to Main Menu