4.3 Chybějící a “divné” hodnoty
V některých případech může proměnná obsahovat příznak, že její hodnota chybí nebo je chybná. R k tomu má tři speciální hodnoty:
NA
je chybějící hodnota (“not available”). Existuje pro všechny základní datové typy.NaN
znamená, že numerická hodnota není číslo, ale je chybná (“not a number”). Tato hodnota existuje jen pro typ double.Inf
označuje nekonečnou hodnotu; podobně-Inf
zápornou nekonečnou hodnotu. Obě hodnoty také existují jen pro typ double.
Nekonečná hodnota vznikne např. při dělení nenulového čísla nulou:
1 / 0
## [1] Inf
Chybná hodnota vznikne při různých nepovolených matematických operacích, které však nevedou na nekonečno, např. při dělení nuly nulou:
0 / 0
## [1] NaN
Chybějící hodnoty NA
se obvykle používají při zadávání hodnot v konzoli nebo ve skriptu a při ukládání čísel do souboru, aby se označilo, která hodnota chybí. Mohou však také být výsledkem výpočtu, když danou operaci není možné provést, ale nejedná se při tom o neplatné počítání s čísly, které by vedlo na Inf
nebo NaN
.
Existují testy, které testují, zda je hodnota proměnné NA
, NaN
nebo Inf
, a které vracejí jako výsledek logickou hodnotu testu TRUE
nebo FALSE
: is.na()
, is.nan()
, is.finite()
a is.infinite()
. Funkce is.infinite()
vrací TRUE
jak pro Inf
, tak i pro -Inf
; funkce is.finite()
naopak. Pozor: funkce is.na()
vrací TRUE
jak pro NA
, tak i pro NaN
.
Stejně jako ostatní hodnoty v R, tak i chybějící hodnoty mají svůj typ. V celočíselné proměnné je tak NA
ve skutečnosti reprezentované jako NA_integer_
, zatímco v reálné proměnné jako NA_real_
apod. Pokud byste vypsali obsah těchto dvou proměnných na obrazovku, uvidíte NA
; pokud byste použili k otestování shody jejich obsahu funkci identical()
(viz dále), zjistíte, že hodnoty nejsou stejné:
<- c(1L, NA)[2] # vezme se druhá hodnota celočíselného vektoru
x1 <- c(1, NA)[2] # vezme se druhá hodnota reálného vektoru
x2 x1
## [1] NA
x2
## [1] NA
identical(x1, x2)
## [1] FALSE
Velmi speciální hodnotou je NULL
. NULL
je speciální objekt (má vlastní datový typ) a zároveň rezervované slovo, které R vrací v situaci, kdy nějaká hodnota není definovaná nebo nějaký vektor neexistuje. NULL
se často chová jako vektor nulové délky. K otestování, zda je hodnota objektu NULL
slouží funkce is.null()
.