R Language
दोष-सहिष्णु / लचीला कोड
खोज…
पैरामीटर
पैरामीटर | विवरण |
---|---|
expr | यदि " tryCatch पार्ट" सफलतापूर्वक पूरा हो गया, तो tryCatch अंतिम मूल्यांकित अभिव्यक्ति लौटाएगा। इसलिए, जब सब कुछ ठीक हो जाता है, तो वास्तविक मूल्य लौटाया जाता है और कोई शर्त नहीं होती है (यानी चेतावनी या त्रुटि ) readLines का रिटर्न मान readLines । ध्यान दें कि आपको "वैल्यू पार्ट" में कोड के रूप में return माध्यम से रिटर्न वैल्यू की खोज करने की आवश्यकता नहीं है, एक फंक्शन एनवायरमेंट को कवर नहीं किया गया है (इसके विपरीत चेतावनी और त्रुटि के लिए कंडीशन हैंडलर के लिए) |
चेतावनी / त्रुटि / आदि | उन सभी स्थितियों के लिए एक हैंडलर फ़ंक्शन प्रदान / परिभाषित करें जिन्हें आप स्पष्ट रूप से संभालना चाहते हैं। AFAIU, आप किसी भी प्रकार की परिस्थितियों के लिए हैंडलर प्रदान कर सकते हैं (न केवल चेतावनियाँ और त्रुटियां , बल्कि कस्टम स्थितियाँ; उस के लिए simpleCondition स्थिति और मित्र देखें) जब तक संबंधित हैंडलर फ़ंक्शन का नाम संबंधित स्थिति के वर्ग से मेल खाता है (देखें) के लिए दस्तावेज़ का विवरण हिस्सा tryCatch )। |
आखिरकार | यहां सब कुछ चला जाता है जिसे बहुत अंत में निष्पादित किया जाना चाहिए, भले ही "ट्राइ पार्ट" में अभिव्यक्ति सफल हुई हो या यदि कोई शर्त थी। यदि आप एक से अधिक अभिव्यक्ति निष्पादित करना चाहते हैं, तो आपको उन्हें घुंघराले कोष्ठक में लपेटने की आवश्यकता है, अन्यथा आप बस finally = <expression> लिख सकते थे finally = <expression> (यानी "कोशिश भाग" के रूप में एक ही तर्क)। |
टिप्पणियों
tryCatch
tryCatch
मूल्य को क्रियान्वित करने के लिए जुड़े रिटर्न expr
एक चेतावनी या एक त्रुटि: जब तक कि वहाँ एक शर्त है। यदि यह मामला है, तो विशिष्ट रिटर्न मान (उदाहरण के लिए return(NA)
ऊपर) संबंधित स्थितियों के लिए हैंडलर फ़ंक्शन की आपूर्ति करके निर्दिष्ट किया जा सकता है (तर्कों और warning
error
देखें ?tryCatch
)। ये ऐसे कार्य हो सकते हैं जो पहले से मौजूद हैं, लेकिन आप उन्हें tryCatch
भीतर भी परिभाषित कर सकते हैं (जैसा कि हमने ऊपर किया था)।
हैंडलर फ़ंक्शंस के विशिष्ट रिटर्न वैल्यू चुनने के निहितार्थ
जैसा कि हमने निर्दिष्ट किया है कि "प्रयास भाग" में त्रुटि के मामले में NA
को लौटा दिया जाना चाहिए, y
में तीसरा तत्व NA
। अगर हमने NULL
को रिटर्न वैल्यू के लिए चुना है, तो y
की लंबाई 3
बजाय 2
होगी क्योंकि lapply
बस NULL
रिटर्न मानों को "अनदेखा / ड्रॉप" करेगा। यह भी ध्यान दें कि यदि आप रिटर्न के माध्यम से एक स्पष्ट वापसी मूल्य निर्दिष्ट नहीं करते return
, तो हैंडलर फ़ंक्शन NULL
(यानी किसी त्रुटि या चेतावनी की स्थिति में) वापस आ जाएगा।
"अनसेस्ड" चेतावनी संदेश
जब हमारे urls
वेक्टर का तीसरा तत्व हमारे फ़ंक्शन को हिट करता है, तो हमें इस तथ्य के अलावा निम्नलिखित चेतावनी मिलती है कि ( readLines
सबसे पहले शिकायत करती है कि यह वास्तव में एक त्रुटि के साथ विफल होने से पहले चेतावनी के माध्यम से कनेक्शन नहीं खोल सकती है ):
Warning message:
In file(con, "r") : cannot open file 'I'm no URL': No such file or directory
एक चेतावनी पर "जीत" एक त्रुटि है , इसलिए हम वास्तव में इस विशेष मामले में चेतावनी में दिलचस्पी नहीं रखते हैं। इस प्रकार हमने readLines
में warn = FALSE
निर्धारित किया है, लेकिन इसका कोई प्रभाव नहीं पड़ता है। चेतावनी को दबाने का एक वैकल्पिक तरीका उपयोग करना है
suppressWarnings(readLines(con = url))
के बजाय
readLines(con = url, warn = FALSE)
TryCatch का उपयोग करना ()
हम एक फ़ंक्शन के एक मजबूत संस्करण को परिभाषित कर रहे हैं जो किसी दिए गए URL से HTML कोड पढ़ता है। इस अर्थ में मजबूत है कि हम यह चाहते हैं कि हम ऐसी स्थितियों को संभालें, जहां या तो कुछ गलत हो जाए (त्रुटि) या बिल्कुल नहीं जिस तरह से हमने इसे (चेतावनी) की योजना बनाई है। त्रुटियों और चेतावनियों के लिए छाता शब्द शर्त है
tryCatch
का उपयोग करके फ़ंक्शन की परिभाषा
readUrl <- function(url) {
out <- tryCatch(
########################################################
# Try part: define the expression(s) you want to "try" #
########################################################
{
# Just to highlight:
# If you want to use more than one R expression in the "try part"
# then you'll have to use curly brackets.
# Otherwise, just write the single expression you want to try and
message("This is the 'try' part")
readLines(con = url, warn = FALSE)
},
########################################################################
# Condition handler part: define how you want conditions to be handled #
########################################################################
# Handler when a warning occurs:
warning = function(cond) {
message(paste("Reading the URL caused a warning:", url))
message("Here's the original warning message:")
message(cond)
# Choose a return value when such a type of condition occurs
return(NULL)
},
# Handler when an error occurs:
error = function(cond) {
message(paste("This seems to be an invalid URL:", url))
message("Here's the original error message:")
message(cond)
# Choose a return value when such a type of condition occurs
return(NA)
},
###############################################
# Final part: define what should happen AFTER #
# everything has been tried and/or handled #
###############################################
finally = {
message(paste("Processed URL:", url))
message("Some message at the end\n")
}
)
return(out)
}
चीजों को परखना
आइए उन URL के वेक्टर को परिभाषित करें जहां एक तत्व एक मान्य URL नहीं है
urls <- c(
"http://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html",
"http://en.wikipedia.org/wiki/Xz",
"I'm no URL"
)
और इसे उपरोक्त फ़ंक्शन के इनपुट के रूप में पास करें
y <- lapply(urls, readUrl)
# Processed URL: http://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html
# Some message at the end
#
# Processed URL: http://en.wikipedia.org/wiki/Xz
# Some message at the end
#
# URL does not seem to exist: I'm no URL
# Here's the original error message:
# cannot open the connection
# Processed URL: I'm no URL
# Some message at the end
#
# Warning message:
# In file(con, "r") : cannot open file 'I'm no URL': No such file or directory
आउटपुट की जांच
length(y)
# [1] 3
head(y[[1]])
# [1] "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"
# [2] "<html><head><title>R: Functions to Manipulate Connections</title>"
# [3] "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
# [4] "<link rel=\"stylesheet\" type=\"text/css\" href=\"R.css\">"
# [5] "</head><body>"
# [6] ""
y[[3]]
# [1] NA