क्या आर के पास अजगर के रूप में एक जोरदार बयान है?


98

एक बयान जो जाँचता है कि क्या कुछ सत्य है और यदि नहीं दिया गया त्रुटि संदेश प्रिंट करता है और बाहर निकलता है

जवाबों:


123

stopifnot()

आपको यूनिट परीक्षण के लिए रनिट और टेस्टाटैट जैसे पैकेजों में भी रुचि हो सकती है ।


क्या स्टॉपिफ़्नॉट () रुकने पर रिपोर्ट किए गए त्रुटि संदेश को नियंत्रित करने का कोई तरीका है?
निक

13
@ निक, नहीं। stopifnot()वैधता परीक्षण के लिए उपयोग करें , यह जांचने के लिए कि कोड वह कर रहा है जो वह कर रहा है, लेकिन if (blahdiblah) stop("error message")इनपुट परीक्षण के लिए, यह परीक्षण करने के लिए कि प्रोग्राम के लिए इनपुट मान्य है। केवल बाद वाले को कभी-कभी सामान्य उपयोग के दौरान होना चाहिए।
Harlan

6
हेडली का नया assertthatपैकेज भी देखें , जो इससे बेहतर जवाब देता stopifnotहै: github.com/hadley/assertthat
Harlan

12

@Nick:

आप अपने त्रुटि संदेश को नियंत्रित कर सकते हैं यदि आप उस स्थिति का परीक्षण करने के लिए एक वर्णनात्मक नाम के साथ एक फ़ंक्शन लिखते हैं जो आपके प्रोग्राम में एक त्रुटि फेंक देगा। यहाँ एक उदाहरण है:

Less_Than_8 = function(x) return(x < 8)

for (i in 1:10)
{
  print(i)
  stopifnot(Less_Than_8(i))
}

यह संख्या 1 को 8 के माध्यम से प्रिंट करेगा, फिर एक संदेश प्रिंट करेगा जो कहता है

Error: Less_Than_8(i) is not TRUE

यह अच्छा होगा यदि कोष्ठकों में "i" को उस मान से बदल दिया गया जो परीक्षण में विफल रहा, लेकिन आपको वह मिलता है जो आप भुगतान करते हैं।

यदि आपको उससे कुछ भी कट्टरपंथी की आवश्यकता है, तो हरित द्वारा सुझाए अनुसार रनरेट और टेस्टाटैट में देखें।


आप फ़ंक्शन की परिभाषा को stopifnot()भी अंदर रख सकते हैं।
naught101

2
n-0101, एक नामित फ़ंक्शन में परीक्षण होने का बिंदु त्रुटि संदेश में मुद्रित परीक्षण का नाम प्राप्त करना है
मैथ्यू

5

यह stopकमांड के साथ प्राप्त किया जा सकता है । यह कमांड किसी फ़ंक्शन के निष्पादन को रोक देगा और त्रुटि संदेश प्रिंट करेगा। उदाहरण के लिए, हम परीक्षण कर सकते हैं कि चर क्या somethingहै FALSE:

if(something == FALSE){
   stop("error message to print")   
}

इसी तरह, warningकमांड एक चेतावनी प्रिंट करेगा (लेकिन कोड को निष्पादित करना जारी रखें)।

if(something == FALSE){
   warning("error message to print")   
}

ये दोनों आधार आर द्वारा प्रदान किए गए हैं और इन्हें चलाने के लिए या अपने कार्यों को लिखने में शामिल करने के लिए किसी पैकेज की आवश्यकता नहीं है। मैं कम निर्भरता वाले कोड लिखने के लिए इस दृष्टिकोण को पसंद करता हूं और इस वाक्यविन्यास का व्यापक रूप से पैकेज विकास में उपयोग किया जाता है। हालांकि, इसी तरह की कार्यक्षमता को "एसरथेट" पैकेज द्वारा फ़ंक्शन के साथ समर्थित किया गया है assert_thatजो हाल ही में हैडली के "टिड्वर्स" के हिस्से के रूप में जारी किया गया है।

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