Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyCvičebnice jazyka R Dokumentace k základním funkcím NA

NA

Not available / chybějící hodnoty

NA {base} Dokumentace R v češtině

Popis

NA je logická konstanta délky 1, obsahující indikátor chybějící hodnoty. NA lze konvertovat na libovolný jiný typ vektoru mimo typu raw. Existují také konstanty NA_integer_, NA_real_, NA_complex_ a NA_character_ ostatních atomických vektorových typů, které odpovídají chybějícím hodnotám. Všechny patří mezi rezervovaná slova jazyka R.

Generická funkce is.na slouží ke zjištění chybějících prvků.

Generická funkce is.na<- nastavuje prvky na NA.

Generická funkce anyNA implementuje funkci any(is.na(x)) potenciálně rychlejším způsobem (zejména pro atomické vektory).

Použití

NA
is.na(x)
anyNA(x, recursive = FALSE)

## S3 metoda pro tridu 'data.frame'
is.na(x)

is.na(x) <- value

Argumenty

x R objekt k otestování: implicitní metoda pro is.na zpracovává atomické vektory, seznamy (list) a párové seznamy (pairlist): funkce pro anyNA umí také zpracovat NULL.
recursive logická hodnota: má být funkce anyNA použita rekurzivně na seznamy (list) a párové seznamy (pairlist)?
value vhodný indexový vektor pro použití s x.

Detaily

Hodnota NA typu character není totéž, co textový řetězec "NA". Programátoři, kteří potřebují explicitně vyjádřit chybějící hodnotu textového řetězce mohou použít výraz NA_character_ (namísto nesymyslného "NA") nebo nastavit prvky vektoru na NA pomocí funkce is.na<-.

is.na a anyNA jsou generické: lze vytvářet metody pro zpracování specifických tříd objektů, viz InternalMethods.

Funkce is.na<- nabízí bezpečnější cestu k nastavení chybějících hodnot. Například se chová jinak v případě faktorů.

Numerické výpočty pracující s hodnotou NA běžně vrací výsledek NA: možnou výjimkou je současné zpracování hodnot NaN (not a number), které se mohou rovněž objevit ve výsledku. Logické výpočty zpracovávají NA jako chybějící hodnotu TRUE/FALSE a tím pádem může být jejich výsledkem TRUE nebo FALSE, poklud není logický výraz závislý na operandu NA.

Implicitní metoda pro anyNA zpracovává atomické vektory bez tříd a hodnotu NULL. Volá se ve tvaru any(is.na(x)) na objekty se třídami, pro recursive = FALSE, na seznamu (list) a párové seznamy (pairlist).

Hodnota

Implicitní metoda pro is.na aplikovaná na atomický vektor vrací vektor logických hodnot o stejné délce, jako je délka argumentu x, obsahující prvky TRUE pro prvky NA, případně NaN pro vektory typu numeric a complex a FALSE v ostatních případech. (Komplexní hodnota má přiřazenu hodnotu NA v případě, že je její imaginární nebo reálná (příp. obě) část rovna NA nebo NaN. Atributy dim, dimnames and names přechází na výsledek beze změny.

Implicitní metody umí také zpracovat seznamy (list) a párové seznamy (pairlist):
Pro is.na je po prvcích výsledek roven FALSE kromě případů, kdy je daný prvek jednoprvkový atomický vektor a jediným oprvkem tohoto vektoru je hodnota NA nebo NaN (povšimněte si, že jakákoliv is.na metoda pro třídu prvku je ignorována).
Funkce (recursive = FALSE)anyNA funguje stejně jako is.na; funkce anyNA(recursive = TRUE) aplikuje anyNA na každý prvek jednotlivě.

Metoda is.na pro datové rámce vrací matici logických hodnot o stejné dimenzi jako původní datový rámec s názvy dimenzí (dimnames) převzatými z řádkových a sloupcových názvů původního datového rámce.

anyNA(NULL) vrací FALSE: is.na(NULL) vrací logical(0) s varováním.

Reference

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
Chambers, J. M. (1998) Programming with Data. A Guide to the S Language. Springer.

Příklady

is.na(c(1, NA)) #> FALSE TRUE
is.na(paste(c(1, NA))) #> FALSE FALSE

(xx <- c(0:4))
is.na(xx) <- c(2, 4)
xx #> 0 NA 2 NA 4
anyNA(xx) # TRUE

# Nektere logicke operace nevraci NA
c(TRUE, FALSE) & NA
c(TRUE, FALSE) | NA

## Mereni rozdilu vypocetni rychlosti v oblibenych pripadech:
## rozdil zavisi na platforme, obvykle cca 3x.
x <- 1:10000; x[5000] <- NaN # zmeni x na double
if(require("microbenchmark")) { # nefunguje spolehlive na vsech platformach
print(microbenchmark(any(is.na(x)), anyNA(x)))
} else {
nSim <- 2^13
print(rbind(is.na = system.time(replicate(nSim, any(is.na(x)))),
anyNA = system.time(replicate(nSim, anyNA(x)))))
}

## anyNA() muze fungovat rekurzivne se seznamy (list):
LL <- list(1:5, c(NA, 5:8), c("A","NA"), c("a", NA_character_))
L2 <- LL[c(1,3)]
sapply(LL, anyNA); c(anyNA(LL), anyNA(LL, TRUE))
sapply(L2, anyNA); c(anyNA(L2), anyNA(L2, TRUE))

## ... kdyz pro seznamy, tak take pro datove ramce:
dN <- dd <- USJudgeRatings; dN[3,6] <- NA
anyNA(dd) # FALSE
anyNA(dN) # TRUE

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity