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.