मुझे नहीं लगता कि RStudio को सभी पंक्तियों को चलाने से रोकने का एक तरीका है, जब आप कोई सेक्शन चुनते हैं और Ctrl + Enter दबाते हैं। Rstudio बस एक लाइन के बाद एक लाइन चल रहा है। भले ही stopifnot()
किसी फ़ंक्शन के अंदर बुलाया जाता है, फिर भी उस फ़ंक्शन कॉल के बाद की सभी पंक्तियों का मूल्यांकन किया जाएगा।
यदि कुछ लक्ष्य गलत होने पर आपके लक्ष्य को सूचित किया जाना है, तो बहुत सारे कोड व्यर्थ में चलने से पहले, शायद आप stopifnot()
के समान फ़ंक्शन को परिभाषित कर सकते हैं जो त्रुटि होने पर बस एक अंतहीन पाश में जायेगा । प्रोग्राम को बाधित करने के लिए आप Esc
या RStudio में स्टॉप-बटन दबा सकते हैं। कुछ इस तरह:
waitifnot <- function(cond) {
if (!cond) {
message(deparse(substitute(cond)), " is not TRUE")
while (TRUE) {}
}
}
अब आप इस समारोह के साथ अपने उदाहरण कोड चला सकते हैं:
x <- 'test'
waitifnot(is.numeric(x))
print('hello world')
जैसी उम्मीद थी, hello world
मुद्रित कभी नहीं किया गया है। आपको एक त्रुटि संदेश मिलेगा, आपको बताएगा कि कुछ गलत हो गया है, और फिर प्रोग्राम तब तक इंतजार करेगा जब तक आप इसे मैन्युअल रूप से निरस्त नहीं करते।
यह इंटरैक्टिव मोड के अलावा किसी भी स्थिति में अच्छी तरह से काम नहीं करेगा। अप्रिय स्थितियों से बचने के लिए, आप भी समारोह अलग प्रतिक्रिया है, अगर यह इस तरह, इंटरैक्टिव मोड में नहीं किया जाता है, उदाहरण के लिए दे सकता है:
waitifnot <- function(cond) {
if (!cond) {
msg <- paste(deparse(substitute(cond)), "is not TRUE")
if (interactive()) {
message(msg)
while (TRUE) {}
} else {
stop(msg)
}
}
}
यह समारोह एक अंतहीन लूप केवल यदि इंटरैक्टिव मोड में चलने में जाना जाएगा। अन्यथा, यह stop()
पर कॉल करके निष्पादन को रद्द कर देगा। मैंने जांच की है कि यह Ctrl + Enter या RStudio (एंडलेस लूप) में स्रोत बटन और बैश कमांड लाइन (प्रोग्राम के निरस्त) पर Rscript
के साथ अपेक्षित कार्य करता है।
यदि आप इसे स्रोत फ़ाइल के रूप में निष्पादित करते हैं, तो यह वही काम करेगा जैसा आप चाहते हैं। यदि आप, उदाहरण के लिए कोड की 3 पंक्तियों को कंसोल में कॉपी और पेस्ट करें और एंटर दबाएं, तो यह कोड की प्रत्येक पंक्ति को अलग से चलाएगा। यह दूसरा मोड संभवतः रन बटन के तहत चल रहा है। – lmo
@ एलएमओ धन्यवाद - समस्या ज्यादातर लोग हैं जिन्हें मैं प्रोग्राम को अंतःक्रियात्मक रूप से जानता हूं। मैं सामाजिक वैज्ञानिकों के लिए उनके कोड में परीक्षण करने के लिए एक ट्यूटोरियल लिखने की कोशिश कर रहा हूं, और उनसे मिलने की जरूरत है जहां वे हैं। –
हमेशा 'tryCatch' और' try' है। – lmo