Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Rozšířené základy R R jako programovací jazyk Cykly a podmínky

Logo Matematická biologie

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

 
vytvořil Institut biostatistiky a analýz Masarykovy univerzity | | zpětné odkazy | validní XHTML 1.0 Strict