2013-04-16 10 views
8

यह प्रतिलिपि प्रस्तुत करने योग्य उदाहरण मेरे कोड का एक बहुत ही सरलीकृत संस्करण है: (एक नंबर नहीं)NaN निकाल दिया जाता है = सही

x <- c(NaN, 2, 3) 

#This is fine, as expected 
max(x) 
> NaN 

#Why does na.rm remove NaN? 
max(x, na.rm=TRUE) 
> 3 
मेरे लिए

, NA (लापता मूल्य) और NaN पूरी तरह से दो हैं विभिन्न संस्थाएं, na.rmNaN क्यों हटाती है? मैं NA को अनदेखा कैसे कर सकता हूं और NaN नहीं?

ps: मैं विंडोज 7 पर 64-बिट आर संस्करण 3.0.0 का उपयोग कर रहा हूं।

संपादित करें: कुछ और अध्ययन मैं NaN भी के लिए कि is.na रिटर्न सही पाया पर ! यह मेरे लिए भ्रम का कारण है।

is.na(NaN) 
> TRUE 

उत्तर

6

यह एक भाषा निर्णय है:

> is.na(NaN) 
[1] TRUE 

is.nan differentiates:

> is.nan(NaN) 
[1] TRUE 
> is.nan(NA) 
[1] FALSE 

तो तुम दोनों कॉल करने के लिए आवश्यकता हो सकती है।

+0

हाँ, मैं सिर्फ इस व्यवहार देखा। गायब मूल्य के बारे में मेरा विचार बदलने की जरूरत है। – Nishanth

+0

@ e4e5f4 शायद मैं इस व्यवहार को नहीं चुना होता, क्या मैं भाषा डिजाइन कर रहा था। पर अब जो है वो है। –

+1

यह ध्यान रखना दिलचस्प है कि 'sum' के लिए सहायता बताती है कि' na.rm = TRUE' 'NaN' और' NA' (जबकि '? Extremes') दोनों को हटा देगा। – mnel

3

na.rm कार्यों में तर्क आमतौर पर is.na() या एक समान कार्य का उपयोग करते हैं।
और is.na(NaN) == TRUE के बाद से, आप तब व्यवहार प्राप्त कर रहे हैं जिसे आप देख रहे हैं।

अब NaN को NA के साथ भी माना जाना चाहिए? यही कारण है कि एक अलग प्रश्न है,)


इस के आसपास सबसे अच्छा तरीका स्पष्ट रूप से R बताने के लिए कैसे संभाल करने के लिए NaN ही एक उदाहरण है:

ifelse(any(is.nan(x)), NaN, min(x, na.rm=TRUE)) 
संबंधित मुद्दे