5.7 Řídící struktury a spol.
Zatím jsme předpokládali, že kód skriptu běží řádek po řádku. Někdy je však potřeba běh kódu různě modifikovat:
- některé řádky provést pouze, když je splněná určitá podmínka
- některé řádky provádět opakovaně
- zastavit běh skriptu s chybovým hlášením
5.7.1 Větvení kódu
K provedení kódu, pouze pokud je splněná nějaká podmínka, slouží if
:
x <- 1
if (x == 1)
print("O.K.: x je jedna!")
## [1] "O.K.: x je jedna!"
Syntaxe: v závorce je logický výraz, na druhém řádku je kód, který se provede pouze v případě, že logický výraz má hodnotu TRUE
.
Pokud se má provést více než jeden řádek kódu, je třeba jej seskupit pomocí složených závorek:
if (x == 1) {
a <- 5
print("O.K.: x je jedna!")
}
## [1] "O.K.: x je jedna!"
a
## [1] 5
Pokud se má nějaký kód provést při platnosti podmínky a jiný, pokud podmínka neplatí:
if (x == 1) {
print("O.K.: x je jedna!")
} else {
print("O.K.: x není jedna!")
}
## [1] "O.K.: x je 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.
5.7.2 Opakování
Pokud se má nějaký kus kódu opakovat \(x\)-krát, použijte for
.
Pokud se má nějaký kus kódu opakovat, dokud je splněná nějaká podmínka, použijte while
nebo repeat
, viz dokumentace.
5.7.3 Zastavení kódu a výstrahy
K zastavení běhu skriptu slouží funkce stop()
: zastaví běh skriptu s chybou a vypíše svůj argument:
# kód se zastaví, pokud v není řetězec (zde se nezastaví)
v <- "ahoj"
if (!is.character(v))
stop("v není řetězec!")
Zprávy je možné do konzoly vypsat pomocí funkce message()
, varování pomocí funkce warning()
:
if (!is.list(v))
warning("Pozor: v není seznam!")
## Warning: Pozor: v není seznam!
Do konzoly je samozřejmě možné vypisovat i pomocí funkcí print()
, cat()
apod. Zprávy o běhu kódu však vypisujte raději pomocí message()
a warning()
: jsou barevně odlišené (aspoň v RStudiu) a je možné je snadno potlačit, pokud nejsou žádoucí, což v případě print()
a spol. nejde.