2012-11-28 11 views
6

मैं क्या करने की जरूरत लिंक के सैकड़ों से डेटा पढ़ने की है, और उन के बीच लिंक की कुछ इसलिए कोई डेटा नहीं है, कोड यहाँ के रूप में, "यह कहते हुए कोई लाइनों उपलब्धकैसे "कोई लाइनों इनपुट में उपलब्ध है" के आर में त्रुटि को ठीक?

urls <-paste0("http://somelink.php?station=",station, "&start=", Year, "01-01&etc") 
myData <- lapply(urls, read.table, header = TRUE, sep = '|') 

एक त्रुटि पॉप अप होता है इनपुट में ", मैंने" कोशिश करें "का उपयोग करने का प्रयास किया है, लेकिन एक ही त्रुटि के साथ, कृपया मदद करें, धन्यवाद।

+0

आखिरी सवाल में टिप्पणी 'urls' की सामग्री के लिए पूछ रहा था। क्या आप कृपया 'dput (urls)' टाइप कर सकते हैं और यहां आउटपुट को कॉपी + पेस्ट कर सकते हैं। –

+0

यो @ GSee के सुझाव की कोशिश की? –

+0

जब वास्तव में आप '" कोई लाइनों इनपुट में उपलब्ध "' त्रुटि देखते हैं? 'MyData <-...' लाइन के ठीक बाद? यदि नहीं, तो क्या myData कुछ इनपुट प्राप्त करता है, सिर्फ सही नहीं? (कृपया नीचे मेरा जवाब देखें, और हमें बताएं कि यह सही दिशा में है या नहीं)। साथ ही, जब आप जीएसई के सुझाव का प्रयास करते हैं तो विशेष रूप से क्या होता है? –

उत्तर

11

यहाँ 2 संभव समाधान (अपरीक्षित क्योंकि आपके उदाहरण प्रतिलिपि प्रस्तुत करने योग्य नहीं है) कर रहे हैं:

try का उपयोग करना:

myData <- lapply(urls, function(x) { 
    tmp <- try(read.table(x, header = TRUE, sep = '|')) 
    if (!inherits(tmp, 'try-error')) tmp 
}) 

tryCatch का उपयोग करना:

myData <- lapply(urls, function(x) { 
    tryCatch(read.table(x, header = TRUE, sep = '|'), error=function(e) NULL) 
}) 
+1

बहुत बहुत धन्यवाद, यह पूरी तरह से काम करता है! – Rosa

+0

@ रोसा, आप 'is.null' का उपयोग कर सूची में नल से छुटकारा पा सकते हैं:
' myData <- myData [! Sapply (myData, is.null)] ' –

+2

@ रोसा, 'फ़िल्टर (एनआरडब्ल्यू, मायडाटा) 'केवल उन घटकों को रखेगा जिनमें कम से कम 1 पंक्ति हो। – GSee

0

इस मदद करता है?

dims <- sapply(myData, dim)[2,] 
    bad_Ones <- myData[dims==1] 
    good_Ones <- myData[dims>1] 

myData अभी भी स्टेशन पेज बंद कुछ पकड़ लेता है, तो उपरोक्त कोड दो अलग-अलग समूहों में myData सूची बांट देना चाहिए। good_Ones वह सूची होगी जिसमें आप काम करना चाहते हैं। के रूप में मुझे लगता है कि वह जगह है जहाँ त्रुटि है, (ऊपर यह सोचते हैं, सही है निश्चित रूप से)

+0

मुझे नहीं लगता कि आप 2 के बाद कि अल्पविराम चाहते हैं, लेकिन मुझे नहीं लगता कि आप 'sapply' चाहते या तो है। हो सकता है कि 'फ़िल्टर' बेहतर होगा, लेकिन यह स्पष्ट नहीं है कि हम किस समस्या को हल करने की कोशिश कर रहे हैं। ;) – GSee

+0

@ रिकार्डो सपोर्त, जीएसई के जवाब के अनुसार मुझे वही परिणाम मिल गए, मुझे लगता है कि खाली डेटा में एक त्रुटि हुई और इस प्रकार लापरवाही समारोह को रोक दिया, और अब यह आगे बढ़ गया क्योंकि हम इसे शून्य पर सेट कर चुके थे। वैसे भी, आपकी मदद के लिए धन्यवाद, सराहना की! :) – Rosa

+0

@Gsee, टिप्पणियों में पोस्ट की गई (गैर-) तालिका को छोड़कर, 'read.table' पूरी सामग्री को एक कॉलम के रूप में ला रहा था, जबकि सही तालिकाओं में कई कॉलम हैं। मैं पहचानने के लिए मंद का उपयोग कर रहा था जिसमें केवल एक कॉलम है। पहले पंक्ति को मंद के पहले आयाम, दूसरी पंक्ति के रूप में दूसरी पंक्ति के रूप में रखता है .. इसलिए अल्पविराम;) –