7.1 Větvení kódu
Normálně R zpracovává skript tak, že vyhodnocuje řádek po řádku. Někdy to však nechceme. Některé řádky můžeme např. chtít provést pouze v případě, že je splněná nějaká podmínka. K tomu v R slouží podmínka if
. Jediným argumentem if
uvedeným v závorkách je podmínka, tj. výraz, který se musí vyhodnotit na logický vektor délky 1. Pokud je tento logický výraz splněný (má hodnotu TRUE
), pak R vyhodnotí následující výraz. Pokud má logický výraz hodnotu FALSE
, pak R následující výraz přeskočí. Ukažme si to na příkladu:
<- 1
x <- 2
y if (x == 1)
print("O.K.: x je jedna!")
## [1] "O.K.: x je jedna!"
if (y == 1)
print("O.K.: y je jedna!")
V tomto příkladě se první podmínka vyhodnotila jako pravdivá (x
má opravdu hodnotu 1), takže R provedlo následující výraz a vypsalo “O.K.: x je jedna!” Naproti tomu druhá podmínka se vyhodnotila jako nepravdivá, takže druhý tiskový řádek R přeskočilo a nic nevypsalo. Všimněte si také, že k porovnání dvou hodnot se používá ==
.
Podmínka if
se v R vztahuje vždy jen na jeden následující výraz. Pokud se má při splnění podmínky provést více než jeden řádek kódu, je třeba tyto řádky seskupit pomocí složených závorek (výrazy zabalené do složených závorek tvoří blok kódu):
if (x == 1) {
<- 5
a print("O.K.: x je jedna!")
}
## [1] "O.K.: x je jedna!"
a
## [1] 5
Nyní při splnění podmínky R nejdříve vloží do proměnné a
hodnotu 5, a pak vypíše “O.K.: x je jedna!” Pokud by podmínka splněná nebyla, R by přeskočila oba řádky uvedené ve složených závorkách.
Někdy chceme, aby se část kódu provedla, pokud podmínka platí, zatímco jiná část kódu, pokud podmínka neplatí. K tomu slouží klauzule else
. V následujícím kódu se vypíše “O.K.: y je jedna!” pokud je y
rovno jedné, a “O.K.: y není jedna!” pokud se y
od jedné liší.
if (y == 1) {
print("O.K.: y je jedna!")
else {
} print("O.K.: y není jedna!")
}
## [1] "O.K.: y není jedna!"
Pozor: else
musí být na stejném řádku, jako končící složená závorka nebo kód, který se provádí při splnění podmínky.
Podmínky lze libovolně řetězit, jak ukazuje následující příklad. Nejdříve se porovná x
s jedničkou. Pokud se x
rovná jedné, pak se vypíše “jedna” a kód pokračuje za poslední složenou závorkou. Pokud se x
od jedničky liší, prozkoumá se, zda je větší než jedna. Pokud je, vypíše se “větší,” pokud není, vypíše se “menší.” (Pozor, tento kód nepočítá s tím, že by x
mohlo mít i hodnotu NA
nebo NaN
– vyzkoušejte si to.)
<- 1
x if (x == 1) {
print("jedna")
else if (x > 1) {
} print("větší")
else {
} print("menší")
}
## [1] "jedna"
Je také možné vnořit jednu podmínku do jiné, jak ukazuje následující příklad:
if (x > 0) {
if (x > 10) {
print("x je opravdu velké kladné.")
else {
} print("x je malé kladné")
} }
## [1] "x je malé kladné"
Podmínky byste však neměli zanořovat příliš, protože by váš kód byl nepřehledný. (Všimněte si také, jak jsou v kódu odsazené řádky. R to nijak nevyžaduje. Je to však velmi užitečná konvence, která výrazně zvyšuje čitelnost kódu.)
Vlastni podminka je vzdy logicka hodnota, presneji logicky vektor delky 1, ktery ma hodnotu bud TRUE
nebo FALSE
, tj. ne NA
. Pokud potrebujete slozitejsi podminku, musite pouzit "zkratujici" verze logickych operatoru, viz oddil 4.7. Pokud se má nějaký kus kódu provést pouze v případě, že platí x
a zároveň y
nebo z
, zapíšeme to takto:
if (x && (y || z)) {
... }
Nápovědu k if
(a dalším řídícím strukturám) získáte jedním z následujících způsobů:
`if`
?help("if")