"चेतावनी ()" आर में दिखाई देने पर लूप को तोड़ना


103

मुझे एक समस्या हो रही है: मैं कई फ़ाइलों को संसाधित करने के लिए एक लूप चला रहा हूं। मेरे मैटरेस बहुत बड़े हैं और इसलिए मैं अक्सर याददाश्त से बाहर हो जाता हूं अगर मैं सावधान नहीं हूं।

यदि कोई चेतावनी बनती है तो क्या पाश से बाहर निकलने का कोई तरीका है? यह सिर्फ लूप चलाता है और रिपोर्ट करता है कि यह बहुत बाद में विफल रहा ... कष्टप्रद। किसी भी विचार ओह बुद्धिमान stackoverflow-ers ?!

जवाबों:


150

आप चेतावनी को त्रुटियों में बदल सकते हैं:

options(warn=2)

चेतावनियों के विपरीत, त्रुटियाँ लूप को बाधित करेंगी। अच्छी तरह से, आर आपको यह भी रिपोर्ट करेगा कि इन विशेष त्रुटियों को चेतावनी से परिवर्तित किया गया था।

j <- function() {
    for (i in 1:3) {
        cat(i, "\n")
        as.numeric(c("1", "NA"))
}}

# warn = 0 (default) -- warnings as warnings!
j()
# 1 
# 2 
# 3 
# Warning messages:
# 1: NAs introduced by coercion 
# 2: NAs introduced by coercion 
# 3: NAs introduced by coercion 

# warn = 2 -- warnings as errors
options(warn=2)
j()
# 1 
# Error: (converted from warning) NAs introduced by coercion

23
बाद में, options(warn=1) डिफ़ॉल्ट सेटिंग को पुनर्स्थापित करने के लिए उपयोग करें।
एलेक्स होल्कोम्बे

25
डिफ़ॉल्ट मान हालांकि 0 है। तो कारखाने सेटिंग्स का उपयोग बहाल करने के लिए options("warn"=0)
डिर्क एडल्डबुलेटेल

R में विकल्पों को रीसेट करना आमतौर पर 1) op=options(warn=2), 2) द्वारा किया जाता है , अपनी बात करना, और फिर 3) के साथ रीसेट करना options(op), जो आपको warn=0इस मामले में वापस ले जाता है ।
mbiron

44

आर आपको एक शर्त हैंडलर को परिभाषित करने की अनुमति देता है

x <- tryCatch({
    warning("oops")
}, warning=function(w) {
    ## do something about the warning, maybe return 'NA'
    message("handling warning: ", conditionMessage(w))
    NA
})

जिसके परिणामस्वरूप

handling warning: oops
> x
[1] NA

प्रयास के बाद निष्पादन जारी है; आप अपनी चेतावनी को त्रुटि में परिवर्तित करके समाप्त करने का निर्णय ले सकते हैं

x <- tryCatch({
    warning("oops")
}, warning=function(w) {
    stop("converted from warning: ", conditionMessage(w))
})

या स्थिति को इनायत से संभालें (चेतावनी कॉल के बाद मूल्यांकन जारी रखें)

withCallingHandlers({
    warning("oops")
    1
}, warning=function(w) {
    message("handled warning: ", conditionMessage(w))
    invokeRestart("muffleWarning")
})

जो प्रिंट करता है

handled warning: oops
[1] 1

+1 - बहुत बढ़िया। मैंने इस विकल्प का उल्लेख करने के बारे में सोचा था, लेकिन इतने छोटे लेकिन मीठे ट्यूटोरियल को एक साथ नहीं रखा जा सकता था।
जोश ओ'ब्रायन

एक अच्छा के साथ एक प्रदर्शन forभी बेहतर होगा :)
Jelenaluklina

28

वैश्विक warnविकल्प सेट करें :

options(warn=1)  # print warnings as they occur
options(warn=2)  # treat warnings as errors

ध्यान दें कि "चेतावनी" एक "त्रुटि" नहीं है। लूप्स चेतावनियों (जब तक options(warn=2)) के लिए समाप्त नहीं होते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.