2011-12-26 10 views
9

मैं the following link में वर्णित अपनी निश्चित चौड़ाई संरचना का उपयोग करके this file (3.8mb) पढ़ने की कोशिश कर रहा हूं।read.fwf और संख्या साइन

यह आदेश:

a <- read.fwf('~/ccsl.txt',c(2,30,6,2,30,8,10,11,6,8)) 

एक त्रुटि उत्पन्न करता है:

line 37 did not have 10 elements

छोड़ विकल्प के विभिन्न मूल्यों के साथ इस मुद्दे को नकल के बाद, मैं लगा कि लाइनों समस्या सभी शामिल "# पैदा कर रहा " प्रतीक।

क्या इसके आसपास जाने का कोई तरीका है?

+1

+1 एक अच्छा प्रश्न लिखने के लिए धन्यवाद जिसमें हमें उस प्रश्न का उत्तर देने के लिए आवश्यक जानकारी शामिल है। –

उत्तर

11

जैसा कि @ जेवरज़ानी ने पहले ही टिप्पणी की है, यह समस्या शायद यह तथ्य है कि # संकेत अक्सर एक टिप्पणी के संकेत के लिए एक चरित्र के रूप में उपयोग किया जाता है। comment.charread.fwf के इनपुट तर्क को # के अलावा किसी अन्य चीज़ पर सेट करना समस्या को ठीक कर सकता है। मैं नीचे अपना उत्तर एक और सामान्य मामला के रूप में छोड़ दूंगा जिसका उपयोग आप किसी भी चरित्र पर कर सकते हैं जो समस्याओं का कारण बनता है (उदाहरण के लिए डच शहर के नाम 's Gravenhage में 's)।

मुझे यह समस्या अन्य प्रतीकों के साथ हुई है। मैंने जो दृष्टिकोण लिया वह बस # को किसी भी चीज़ से प्रतिस्थापित नहीं करना था, या ऐसे चरित्र द्वारा जो त्रुटि उत्पन्न नहीं करता था। मेरे मामले में चरित्र को प्रतिस्थापित करने में कोई समस्या नहीं थी, लेकिन यह आपके मामले में संभव नहीं हो सकता है।

तो मेरा दृष्टिकोण उस प्रतीक को हटाना होगा जो त्रुटि उत्पन्न करता है, या किसी अन्य चरित्र द्वारा प्रतिस्थापित करता है। यह एक आरडी स्क्रिप्ट में टेक्स्ट एडिटर (ढूंढें और प्रतिस्थापित) का उपयोग करके किया जा सकता है, या grep और sed नामक कुछ लिनक्स टूल का उपयोग करके किया जा सकता है। यदि आप इसे आर स्क्रिप्ट में करना चाहते हैं, तो लाइन पढ़ने के लिए scan या readLines का उपयोग करें। एक बार टेक्स्ट मेमोरी में हो जाने पर, आप चरित्र को प्रतिस्थापित करने के लिए sub का उपयोग कर सकते हैं।

यदि आप चरित्र को प्रतिस्थापित नहीं कर सकते हैं, तो मैं निम्न दृष्टिकोण का प्रयास करूंगा: चरित्र को उस वर्ण से प्रतिस्थापित करें जो त्रुटि उत्पन्न नहीं करता है, इसे read.fwf का उपयोग करके आर में पढ़ें, और आखिरकार चरित्र को # वर्ण से प्रतिस्थापित करें।

+5

मुझे लगता है कि एक अलग टिप्पणी चरित्र पारित करना, comment.char = "" के साथ कहें, काम करेगा। (read.table देखें) – jverzani

+0

यदि आप इसे उत्तर के रूप में जोड़ सकते हैं, तो यह बहुत अच्छा होगा! मेरा जवाब थोड़ा और सामान्य है क्योंकि यह किसी भी चरित्र को परेशान करने वाली परेशानी के लिए भी काम करता है (मुझे डच शहर के नामों में यह समस्या है)। –

+0

धन्यवाद, @ जेवरज़ानी टिप ने इस मुद्दे को हल किया। – Alex

4

ऊपर जवाब पर बाद: प्राप्त करने के लिए सभी पात्रों शाब्दिक रूप में पढ़ा जा करने के लिए, का उपयोग दोनों comment.char="" और quote=""read.fwf करने के लिए कॉल में (उत्तरार्द्ध डच व्यक्तिवाचक संज्ञाओं में एकल उद्धरण के साथ @ PaulHiemstra की समस्या का ख्याल रखता है) (यह ?read.table में प्रलेखित है)।

+0

read.fwf में उद्धरण = "" का उपयोग करते समय, मुझे एक त्रुटि मिलती है: read.table में त्रुटि (फ़ाइल = फ़ाइल, शीर्षलेख = शीर्षलेख, sep = sep, row.names = row.names, औपचारिक तर्क "उद्धरण" कई वास्तविक तर्कों से मेल खाता – panterasBox

+0

आप सही हैं - 'उद्धरण = "" 'आवश्यक नहीं होना चाहिए *, जैसा कि' read.table' को आंतरिक रूप से 'quote ="' 'कहा जाता है। यदि आपको कोई समस्या हो रही है लेकिन इस से अलग, आगे बढ़ें और एक और प्रश्न पोस्ट करें ... –

संबंधित मुद्दे