2013-02-20 13 views
77

द्वारा NAS शुरू मैं आम तौर पर कोड आर करना पसंद करते हैं, ताकि मैं चेतावनी नहीं मिलता है, लेकिन मैं जब as.numeric का उपयोग कर एक चरित्र वेक्टर कन्वर्ट करने के लिए एक चेतावनी हो रही से बचने के लिए पता नहीं कैसे चेतावनी से बचने के लिए कैसे।जब बलात्कार

उदाहरण के लिए:

x <- as.numeric(c("1", "2", "X")) 

मुझे एक चेतावनी दे देगा क्योंकि यह बलात्कार से NAS की शुरुआत की। मैं चाहता हूं कि एनएएस जबरन द्वारा पेश किया जाए - क्या यह कहने का एक तरीका है "हां यही वह है जो मैं करना चाहता हूं"। या मुझे सिर्फ चेतावनी के साथ रहना चाहिए?

या मैं इस कार्य के लिए एक अलग समारोह का उपयोग करना चाहिए?

+7

देखें '? शायद suppressWarnings'? – A5C1D2H2I1M1N2O1R2T1

+3

इस चेतावनी के साथ समस्या क्या है? आम तौर पर यह मूल्यवान जानकारी देता है। मैं आर कंसोल में एक और वर्बोज़ आउटपुट पसंद करता हूं ताकि वे आश्चर्यजनक आश्चर्यचकित हो सकें। – Roland

+11

@ रोलैंड मैं पूरी तरह से सहमत हूं, लेकिन अगर आप उन्हें अनदेखा करने के लिए उपयोग करते हैं तो चेतावनियों की उपयोगिता कम हो जाती है। यही कारण है कि मैं आम तौर पर चेतावनियों को "निपटाना" पसंद करता हूं। इस मामले में, मैं हमेशा चेतावनी, और उनमें से बहुत सारे उत्पन्न होगा - अपने डेटा एनए का प्रतिनिधित्व "एक्स" के साथ तारों के रूप में में आ रहा है, और इसलिए समारोह कर रही है वास्तव में क्या मैं इसे करना चाहते हैं। मैं कहना चाहता था "मुझे बताने के लिए धन्यवाद, लेकिन यह ठीक है मुझे पता है कि मैं क्या कर रहा हूं"। 'suppressWarnings' सही लगता है। – Corone

उत्तर

106

उपयोग suppressWarnings():

suppressWarnings(as.numeric(c("1", "2", "X"))) 
[1] 1 2 NA 

इस चेतावनी को रोकता है।

26

suppressWarnings() पहले ही उल्लेख किया गया है। एक विकल्प है कि समस्याग्रस्त वर्ण मैन्युअल रूप से एनए में परिवर्तित करें। आपकी विशेष समस्या के लिए, taRifx::destring बस यही करता है। इस तरह यदि आपको अपने फ़ंक्शन से कुछ अन्य, अप्रत्याशित चेतावनी मिलती है, तो इसे दबाया नहीं जाएगा।

> library(taRifx) 
> x <- as.numeric(c("1", "2", "X")) 
Warning message: 
NAs introduced by coercion 
> y <- destring(c("1", "2", "X")) 
> y 
[1] 1 2 NA 
> x 
[1] 1 2 NA 
+0

बस एक त्वरित बिंदु - मैंने इसे आरआरआईआरएक्स से विनाशकारी कार्य को क्रिब करके और इसे अपने स्वयं के फ़ंक्शन के रूप में परिभाषित करके (जैसा कि होता है, एक अन्य फ़ंक्शन के भीतर) इसे परिभाषित करके मुझे इसका उपयोग किया जाता है, जिसने मुझे आर @ एरी – user1945827

+0

आधार पर कानूनी रूप से कानूनी रूप से रहने की अनुमति दी। https://github.com/gsk3/taRifx/blob/master/R/Rfunctions.R#L1161 –

+0

धन्यवाद: आप समारोह यहां पा सकते हैं। मैंने टायरफ़िक्स का संदर्भ दिया और मैंने जो फ़ंक्शन स्थापित किया था, उसे नष्ट कर दिया लेकिन मुझे संदेह है कि इसे प्रकाशित किया जाएगा ... – user1945827

12

सामान्य दबाने चेतावनी में सबसे अच्छा समाधान आप जब कुछ अप्रत्याशित इनपुट प्रदान किया जाएगा चेतावनी दी जानी करने के लिए चाहते हो सकता है के रूप में नहीं है। नीचे
समाधान डेटा प्रकार रूपांतरण के दौरान सिर्फ एनए बनाए रखने के लिए आवरण है। किसी भी पैकेज की आवश्यकता नहीं है।

as.num = function(x, na.strings = "NA") { 
    stopifnot(is.character(x)) 
    na = x %in% na.strings 
    x[na] = 0 
    x = as.numeric(x) 
    x[na] = NA_real_ 
    x 
} 
as.num(c("1", "2", "X"), na.strings="X") 
#[1] 1 2 NA 
+1

यह सबसे अच्छा जवाब है। 'SuppressWarnings()' का उपयोग करना आम तौर पर एक बुरा विचार है, क्योंकि हमें कभी-कभी उन चेतावनियों को देखने की आवश्यकता होती है। – keberwein