Podmínky a cykly v R

Z WikiSkript

if()[upravit | editovat zdroj]

  • Rozhodovací ovládací prvek založený na pravdivosti, či nepravdivosti nějakého výroku.
  • Else() je nepovinné
if(x == 1){ 
    print("x je rovno 1")
} else {
    print("x není rovno 1")
}

for()[upravit | editovat zdroj]

  • Smyčka pro opakování procedury stejného charakteru
  • Vhodná tehdy, víme-li dopředu počet opakování (iterací) dané procedury
# vytiskne postupně čísla od 1 do 5
for(i in 1:5){
    print(i)
}

# letters obsahuje písmena a-z
for(my_letter in letters){
    print( paste(my_letter, "je fajn", sep = " ") )
}

while()[upravit | editovat zdroj]

  • Smyčka pro opakování procedury stejného charakteru
  • Vhodná tehdy, nevíme-li dopředu počet opakování (iterací) dané procedury
i <- 1
while(i <= 5){
    print(i)
    i <- i + 1
}

# anebo
my_letters <- letters
while(length(my_letters) > 0){
    print( paste(my_letters[1], "je fajn", sep = " ") )
    my_letters <- my_letters[-1]
}

repeat-until cyklus[upravit | editovat zdroj]

  • Smyčka pro opakování procedury stejného charakteru
  • Vhodná tehdy, nevíme-li dopředu počet opakování (iterací) dané procedury
  • První cyklus se provede vždy
  • Jde o smyčku while() použitou jiným způsobem
i <- 1
while(TRUE){
     if(i == 5){break}
     print(i)
    i <- i + 1
}

# anebo
my_letters <- letters
while(TRUE){
    if(length(my_letters) == 0){break}
    print( paste(my_letters[1], "je fajn", sep = " ") )
    my_letters <- my_letters[-1]
}

Náhrada for cyklu funkcí lapply()[upravit | editovat zdroj]

Obě procedury jsou ekvivalentní stran výstupu, lapply() je ale významně rychlejší.

# for cyklus
my_start <- Sys.time()
for_x <- NULL
for(i in 1:100000){for_x <- c(for_x, i ^ 5)}
my_stop <- Sys.time(); my_stop - my_start # 18.45s

# lapply
my_start <- Sys.time()
lapply_x <- unlist(lapply(
    1:100000, function(i) i ^ 5 
))
my_stop <- Sys.time(); my_stop - my_start # 0.10s


Odkazy[upravit | editovat zdroj]

Související články[upravit | editovat zdroj]

Použitá literatura[upravit | editovat zdroj]

Reference[upravit | editovat zdroj]