कई भाषाओं में null या none जैसा कोई तरीका होता है, जो बताता है कि कोई वैल्यू मौजूद नहीं है। चूँकि R को बड़ी मात्रा में (और अक्सर बेतरतीब) डेटा संभालने के लिए बनाया गया है, इसलिए इसमें कुछ न होने के कई रूप हैं।
इन सबका उद्देश्य यह है कि जो वैल्यू गायब हों या संदिग्ध लगें, उन्हें मिलते ही चिह्नित कर दिया जाए, और फिर बिना कोई एक्सेप्शन उठाए काम आगे चलता रहे।
अगर कोई वैल्यू सचमुच मौजूद ही नहीं है, तो उसे NULL से दर्शाया जाता है। यह तरीका शायद C या Python के तरीके के सबसे करीब है।
v <- c() # zero-length vector
v
#> NULL
is.null(v)
#> [1] TRUE
कई जगहों पर NULL वैल्यू को बस अनदेखा कर दिया जाता है:
c(2, 3, NULL, 5)
#> [1] 2 3 5
ऐसी स्थितियों के लिए, जहाँ वैल्यू मौजूद तो है पर हमें पता नहीं कि वह क्या है, NA इस्तेमाल किया जाता है। उदाहरण के लिए, सड़क पर चलने वाले वाहनों की गिनती करते समय हो सकता है कि गिनती करने वाले लोग बीमार पड़ जाएँ या ऑटोमैटिक सेंसर खराब हो जाएँ, लेकिन यातायात चलता रहता है।
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
इसलिए NA एक प्लेसहोल्डर है और यह हमें चेतावनी देता है कि इसके साथ क्या करना है, यह हमें खुद तय करना पड़ेगा।
अगर डेटा में NA वैल्यू मौजूद हों, तो सांख्यिकीय फंक्शन आम तौर पर डिफ़ॉल्ट रूप से NA ही लौटाते हैं। अगर आप चाहते हैं कि इन वैल्यू को अनदेखा किया जाए, तो इसे साफ़-साफ़ बताने के लिए na.rm (NA remove) पैरामीटर इस्तेमाल कीजिए:
v <- c(1, 2, NA, 4, 5)
mean(v)
#> [1] NA
mean(v, na.rm = TRUE)
#> [1] 3
"Not a Number" का छोटा रूप NaN उन जगहों पर गणना की समस्या को चिह्नित करता है, जहाँ संख्या होने की उम्मीद थी।
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
"अवैध" गणनाओं के लिए यही एकमात्र संभावना नहीं है। शून्य से भाग देने पर, अगर ऊपर की संख्या शून्य न हो, तो Inf या -Inf लौटता है, और कोई एरर नहीं उठती।
1 / 0
#> [1] Inf
शायद यह हैरानी की बात है कि R में यह जाँचने का कोई मानक तरीका नहीं है कि कोई वेक्टर खाली है या नहीं, हालाँकि कुछ बाहरी पैकेज is.empty() जैसे अपने फंक्शन खुद बना लेते हैं।
खाली वेक्टर बनाना भी पूरी तरह साफ़ नहीं है। हमने पहले के एक भाग में देखा था कि बिना किसी आर्गुमेंट वाला c() वेक्टर नहीं, बल्कि NULL लौटाता है।
is.vector(c())
#> [1] FALSE
logical() या integer() जैसे फंक्शन एक आर्गुमेंट लेते हैं, जिसमें बताया जाता है कि वेक्टर कितना लंबा चाहिए। यह लंबाई शून्य भी हो सकती है।
z <- logical(0)
is.vector(z)
#> [1] TRUE
length(z)
#> [1] 0
हम किसी वेक्टर को बनाकर उसके सारे एलिमेंट हटा भी सकते हैं, जैसा वेक्टर की अवधारणा में बताया गया है। इससे उचित टाइप का शून्य लंबाई वाला वेक्टर बनता है।
v <- 5
v[-1] # delete the first element
#> numeric(0)