Sok nyelvben van valami, például a null vagy a none, amivel egy nem létező értéket lehet jelölni. Mivel az R-t nagy mennyiségű (gyakran rendezetlen) adat kezelésére tervezték, többféle formája is van a semminek.
Az általános cél az, hogy a hiányzó vagy gyanús értékeket rögtön megjelöljük, amikor találkozunk velük, majd anélkül folytassuk, hogy kivételt dobnánk.
Ha egy érték valóban nem létezik, azt NULL jelöli. Ez valószínűleg áll a legközelebb ahhoz, amit a C vagy a Python tenne.
v <- c() # zero-length vector
v
#> NULL
is.null(v)
#> [1] TRUE
Sok esetben a NULL értékeket egyszerűen figyelmen kívül hagyjuk:
c(2, 3, NULL, 5)
#> [1] 2 3 5
Azokban a helyzetekben, amikor egy érték létezik, de nem tudjuk, mi az, az NA használatos. Például amikor egy úton haladó járműveket számolunk, előfordulhat, hogy az emberi megfigyelők megbetegszenek, vagy elromlanak az automatikus érzékelők, a forgalom viszont tovább halad.
v <- c(1, 2, NA, 4, 5)
v
#> [1] 1 2 NA 4 5
is.na(v) # test for data gaps
#> [1] FALSE FALSE TRUE FALSE FALSE
Így az NA egy helyőrző, amely figyelmezteti az embert, hogy döntenie kell arról, hogyan kezelje ezt.
A statisztikai függvények alapértelmezés szerint általában NA-t adnak vissza, ha NA értékek vannak jelen.
Ha azt szeretnéd, hogy ezeket az értékeket figyelmen kívül hagyják, használd az na.rm (NA remove) paramétert, hogy ezt egyértelművé tedd:
v <- c(1, 2, NA, 4, 5)
mean(v)
#> [1] NA
mean(v, na.rm = TRUE)
#> [1] 3
A „Not a Number” rövidítése; a NaN egy számítási problémát jelez olyan helyzetekben, amikor számot vártunk.
n <- c(0, 2, 4)
d <- c(0, 1, 2)
n / d
#> [1] NaN 2 2 # 0/0 is mathematically undefined
is.nan(n / d)
#> [1] TRUE FALSE FALSE
Ez nem az egyetlen lehetőség az „érvénytelen” számításokra.
A nullával való osztás nem nulla számláló esetén Inf vagy -Inf értéket ad vissza, anélkül hogy hibát dobna.
1 / 0
#> [1] Inf
Talán meglepő, de az R-nek nincs szabványos módja az üresség ellenőrzésére, bár néhány harmadik féltől származó csomag megvalósítja a saját függvényeit, például az is.empty() függvényt.
Még egy üres vektor előállítása sem teljesen nyilvánvaló.
Egy korábbi szakaszban láttuk, hogy az argumentum nélküli c() NULL-t ad vissza, nem egy vektort.
is.vector(c())
#> [1] FALSE
Az olyan függvények, mint a logical() vagy az integer(), egy argumentumot várnak, amely megadja a kívánt hosszt, ami nulla is lehet.
z <- logical(0)
is.vector(z)
#> [1] TRUE
length(z)
#> [1] 0
Úgy is előállíthatunk egy vektort, hogy utána eltávolítjuk az összes elemét, ahogy azt a Vektorok fogalom leírja. Ennek eredménye egy megfelelő típusú, 0 hosszúságú vektor.
v <- 5
v[-1] # delete the first element
#> numeric(0)