पहला: अपने जीवन के उपयोग में कभी भी न बनाएं जो फिर से निर्माण जारी रखें। इसका कोई उपयोग नहीं है। tryCatch()
जारी रहेगा यदि आपने किसी त्रुटि या चेतावनी के लिए हैंडलर परिभाषित किया है। यह "डिफ़ॉल्ट" error=function(e) stop(e)
के बजाय उस का उपयोग करेगा। यह आपके कार्य को रोक देगा। यदि आप एक हैंडलर (या तो warning=
या error=
) परिभाषित करते हैं, तो आपकी स्क्रिप्ट रोका नहीं जाएगा, ताकि जारी रखना आवश्यक न हो।
कहा गया है: इस मामले में tryCatch के सही उपयोग होगा:
for(i in 1:nrow(symbol)){
tryCatch(prices <- getYahooData(symbol$symbol[i], from, to, freq="daily",
type="price"), error = function(e){})
}
या, यदि आप एक स्क्रिप्ट में इसका इस्तेमाल करते हैं और एक त्रुटि तब होती है जब अगले पाश में जाना चाहते हैं, तो आप बस कर सकते हैं उपयोग:
for(i in 1:nrow(symbol)){
prices <- try(getYahooData(symbol$symbol[i], from, to, freq="daily",
type="price"), silent=TRUE)
if(inherits(prices,"try-error")) { next } # only true if an error occurs
... # rest of calculations
}
आप tryCatch का इस तरह से इस्तेमाल किया है चाहते हैं या कोशिश करते हैं, क्या आप यहाँ रिपोर्ट समस्या नहीं पड़ता था।
अब मैं आपके मामले को पुन: उत्पन्न कर सकता हूं, अगर मैं बिना किसी प्रतीकात्मक प्रतीकों का उपयोग करता हूं। tryCatch()
फ़ंक्शन का आपका गलत उपयोग आपको परेशानी का कारण बन रहा है। read.table
एक त्रुटि देता है (Error in file(file, "rt") : cannot open the connection
)। यह एक त्रुटि है, चेतावनी नहीं। आपको एक अतिरिक्त चेतावनी मिल रही है कि 404 फाइल नहीं मिली है।
जब किसी त्रुटि के साथ एक चेतावनी जारी की जाती है, तो चेतावनी के लिए हैंडलर फ़ंक्शन को पहले से निपटाया जाता है। ऐसा इसलिए है क्योंकि फ़ंक्शन को रोका जा सकता है इससे पहले एक चेतावनी फेंकनी पड़ती है। इसलिए यह आपके द्वारा प्राप्त त्रुटि को संभाल नहीं पाएगा, जिसका अर्थ है कि on.exit(close(file))
read.table()
में नहीं कहा जाएगा। इसलिए, कनेक्शन सही ढंग से बंद नहीं होता है और अभी भी खुला माना जाता है, हालांकि यह अब R (showAllConnections() कुछ भी नहीं दिखाता है) द्वारा नहीं पाया जा सकता है। चूंकि त्रुटि का सामना नहीं किया जाता है, कनेक्शन के पंजीकरण में कुछ गलत हो जाता है। चूंकि कनेक्शन खोला नहीं जा सका, on.exit(close(...))
का कोई प्रभाव नहीं पड़ेगा। showConnections()
कनेक्शन नहीं दिखाता है, लेकिन किसी भी तरह आर अभी भी सोचता है कि यह वहां है। इसलिए, सभी नरक टूट जाते हैं और आप अपने आर को दुर्घटनाग्रस्त करते हैं।सुधार के लिए
धन्यवाद
एक साधारण कोड उदाहरण @Tommy को यह वर्णन करने के लिए:
myfun <- function(x){
if(x>1) warning("aWarning")
stop("aStop")
x
}
tryCatch(myfun(0.5),
warning=function(w)print("warning"),
error=function(e) print("stop"))
[1] "stop"
tryCatch(myfun(1.5),
warning=function(w)print("warning"),
error=function(e) print("stop"))
[1] "warning"
सारांश में:
- जांच प्रतीकों आप का उपयोग करें। वे शायद गलत हैं।
- यदि आप त्रुटियों की अपेक्षा करते हैं तो कभी भी एक चेतावनी हैंडलर का उपयोग न करें।
और एक अतिरिक्त के रूप: अपने पाश केवल पिछले कॉल का परिणाम वापस आ जाएगी, जैसा कि आप prices
आप पाश के माध्यम से जाना हर बार ऊपर लिख, मामले में आप सही प्रतीकों का प्रयोग किया गया होता।
संपादित करें: मामले में आप कार्रवाई
मेरे सिस्टम पर गैर-पुनरुत्पादित। आपके द्वारा उपयोग किए जाने वाले प्रतीक वेक्टर क्या हैं? 'dput (प्रतीक) 'आज़माएं और हमें आउटपुट दें। –
आपने इसे पुन: पेश कैसे किया? मैं इस समारोह का उपयोग लगभग 3000 शेयर मूल्य – Dail
पहले डाउनलोड करने के लिए करता हूं, मैंने नहीं किया। जब तक मुझे पता चला कि मेरे पास कुछ त्रुटि और चेतावनी के साथ कुछ होना चाहिए। इसलिए मैंने आपकी समस्या हल की, लेकिन आपके द्वारा पोस्ट किए गए कोड के लिए आप कुछ गंभीर स्पैंकिंग के लायक हैं। ;) –