Větvení podmínkou
Někdy je nutné provést příkaz či řadu příkazů až po splnění nějaké předem definované podmínky. K tomu nám slouží příkaz if (popř. ifelse).
if (logická podmínka) {příkazy} else {příkazy}
Příkaz else je volitelný, lze ho tedy vynechat. Zde bychom chtěli upozornit, že protože else část příkazu je nepovinná, nový řádek mezi } a else způsobuje problémy - R považuje příkaz za ukončený a načte else jako novou funkci s chybovou hláškou.
Složené závorky { } do kterých se zadávají příkazy nejsou nutné, pokud použijeme pouze jeden příkaz:
if (logická podmínka) příkaz
Logická podmínka může nabývat tvaru:
if (a>=0) { }
Můžeme také použít pouze logický vektor, například:
d <- TRUE nebo d <- FALSE
if (d) { }
v tomto případě tedy nemusíme psát if(d==TRUE)
Další možností vyhodnocení podmínky a následného provedení příkazu může být funkce ifelse():
ifelse (logická podmínka, příkaz pokud je podmínka splněna, příkaz pokud podmínka není splněna)
Jednou z nejčastějších chyb je použití logického vektoru o více než jednom prvku pro logickou podmínku:
> x <- c(0.5,2,3)
> if(x < 1) y <- -1 else y <- 1
Warning message:
In if (x < 1) y <- -1 else y <- 1 :
the condition has length > 1 and only the first element will be used
Nesmíme zapomenout, že výsledkem logické operace na vektoru je logický vektor, tedy:
> x < 1
[1] TRUE FALSE FALSE
Na základě které z těchto třech hodnot vyhodnotíte, že podmínka if je platná? Protože nelze rozhodnout, R podmínku vyhodnotí tak, že pro rozhodování použije první element logického vektoru a upozorní Vás na to chybovou hláškou (výše). Protože první hodnota logického vektoru je TRUE, příkaz se vyhodnotí jako y <- -1:
> y
[1] -1
Chcete-li testovat každý prvek vektoru x a tedy získat více hodnot y, můžete použít funkci ifelse:
> y <- ifelse(x < 1, -1, 1)
> y
[1] -1 1 1