7.3 Zastavení kódu a varování
Někdy je potřeba výpočet zastavit a vydat chybovou hlášku. Typicky to chcete udělat, když váš kód dostal špatný vstup. Řekněme např., že stahujete data z nějakého serveru a víte, že některá proměnná může mít jen určité úrovně. Převedete ji tedy na faktor a zkontrolujete, že žádná hodnota ve faktoru není NA
, což by signalizovalo, že server změnil kódování úrovní. Pokud tedy ve vektoru najdete NA
, chcete kód ukončit chybou, abyste zjistili, že musíte situaci řešit.
K zastavení běhu skriptu slouží funkce stop()
: zastaví běh skriptu a jako chybovou hlášku vypíše svůj argument. Následující kód zastaví běh skriptu a vypíše chybovou hlášku, pokud v
obsahuje řetězec:
## Error in eval(expr, envir, enclos): v je řetězec!
Jednodušší variantou předchozího kódu je použití funkce stopifnot()
. Ta zastaví kód, pokud se zadaný výraz nevyhodnotí na TRUE
. V tom případě se vypíše jako chybová hláška, že daný výraz není TRUE
. Předchozí podmínku pak můžeme zapsat přibližně takto (všimněte si znaku !
, který neguje zadaný výraz):
## Error: !is.character(v) is not TRUE
Někdy problém není tak velký, že bychom chtěli běh skriptu zastavit. Chceme však upozornit uživatele (nejčastěji sami sebe), že někde nastal nějaký problém. R umí posílat dva typy signálů: zprávy (messages) a varování (warnings).
Zprávy je možné do konzoly vypsat pomocí funkce message()
, varování pomocí funkce warning()
. Obě tyto funkce vypíší do konzoly svůj argument:
## 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()
: v RStudiu jsou barevně odlišené a je možné je snadno potlačit pomocí funkcí suppressMessages()
a suppressWarnings()
, pokud nejsou žádoucí, což v případě print()
a spol. nejde.