2012-10-24 10 views
9

उम्मीद किसी की मदद कर सकते हैं मुझे समझने क्यों गुमराह \ N पात्रों तार का एक वेक्टर है कि मैं आरसी() के लिए क्यों और कहाँ n न्यूलाइन वर्ण पेश किए जा रहे हैं?

में बना रहा हूं आयात और निश्चित चौड़ाई प्रारूप में है कि एक बहुत व्यापक डेटा फ़ाइल को साफ करने की कोशिश कर रहा में दिख रहे हैं (http://www.state.nj.us/education/schools/achievement/2012/njask6/, 'डेटा चलाने के लिए टेक्स्ट फ़ाइल')। Read.fwf और this उत्कृष्ट SO प्रश्न का उपयोग करने के बाद स्तंभों के नाम देने के लिए UCLA tutorial का पालन करें।

क्योंकि फ़ाइल वास्तव में चौड़ी है, कॉलम हेडर लंबे हैं - सभी एक साथ, केवल 2 9 800 वर्णों के नीचे। मैं उन्हें तार का एक सरल वेक्टर के रूप में में गुजर रही है:

column_names <- c(...) 

मैं तुम्हें बदसूरत डंप यहाँ छोड़ देंगे, लेकिन मैं pastebin पर पूरी बात गिरा दिया।

विश्लेषण के लिए कुछ चरों को साफ और परिवर्तित कर रहा था जब मैंने देखा कि मेरे कुछ सबसेट 0 पंक्तियों को वापस कर रहे थे। इसके बारे में परेशान होने के बाद (क्या मैंने कुछ गलत लिखा?) यह महसूस किया कि किसी भी तरह से मेरे कॉलम हेडर में '\ n' न्यूलाइन वर्णों का एक गुच्छा पेश किया गया था।

तो COLUMN_NAMES वेक्टर मेरे द्वारा बनाए गए कि

for (i in 1:length(column_names)) { 
    print(column_names[i]) 
} 

मैं 81 वीं लाइन के बीच में पहले न्यू लाइन चरित्र को देखने से अधिक मैं पाश -

विशेष \ nEDUCATION विज्ञान संख्या नामांकित विज्ञान

एवेन्यू जिन्हें मैंने हल करने का प्रयास किया:

1) क्या यह मेरे पर्यावरण के बारे में कुछ है? मैं आर में नियमित स्क्रिप्ट संपादक का उपयोग कर रहा हूं, और मेरी लाइन रैप करें - लेकिन मेरी स्क्रीन पर ब्रेक \ n अक्षरों के प्लेसमेंट से मेल नहीं खाते हैं, जो मुझे बताता है कि यह आर स्क्रिप्ट संपादक नहीं है।

2) क्या कोई GUI सेटिंग है? कुछ searching किया था, लेकिन कुछ भी नहीं मिला।

3) क्या कोई पैटर्न है? ऐसा लगता है कि प्रत्येक 4000 वर्णों के बारे में न्यूलाइन वर्ण डाले गए हैं। आर/एस प्राइमेटिव्स पर कुछ पढ़ने के लिए यह पता लगाने की कोशिश की गई कि क्या इसका मूल आर डेटा संरचनाओं के साथ कुछ करना है, लेकिन मेरे सिर पर बहुत जल्दी था।

मैंने लंबी स्ट्रिंग को shorter chunks में तोड़ने की कोशिश की, और उसके बाद बाद में उन्हें संयोजित किया, और यह समस्या को हल करने लग रहा था।

column_names.1 <- c(...) 
column_names.2 <- c(...) 
column_names_combined <- c(column_names.1, column_names.2) 

इसलिए मेरे पास तत्काल कार्यवाही है, लेकिन यह जानना अच्छा लगेगा कि वास्तव में यहां क्या चल रहा है।

posts में से कुछ है कि चरित्र वैक्टर के साथ समस्याओं से कोई लेना देना था सुझाव दिया है कि मैं स्मृति प्रोफ़ाइल चलाएँ:

memory.profile() 
     NULL  symbol pairlist  closure environment  promise 
      1  9572  220717  4734  1379  5764 
    language  special  builtin  char  logical  integer 
     63932   165  1550  18935  10302  30428 
     double  complex character   ...   any  list 
     2039   1  60058   0   0  20059 
    expression bytecode externalptr  weakref   raw   S4 
      1  16553   725   150   151  1162 

मैं आर 2.15.1 (64-बिट) आर चल रहा हूँ विंडोज 7 पर (उद्यम , एसपी 1, 8 गीगा रैम)। धन्यवाद!

+2

पेस्टबिन में कोड को आप कैसे निष्पादित कर रहे हैं? क्या आप इसे कॉपी और पेस्ट कर रहे हैं? या इसे एक फाइल से सोर्सिंग? या किसी अन्य तरीके से? – hadley

+0

नई स्क्रिप्ट और फिर प्रतिलिपि बनाना और पेस्ट करना, हाँ। एक फ़ाइल से सोर्सिंग नहीं। – Andrew

+0

यह एक कॉपी और पेस्ट बग है (मुझे लगता है) आर (या शायद आर क्लाइंट जिसका आप उपयोग कर रहे हैं) - बस इसके बजाय फ़ाइल से स्रोत करें। – hadley

उत्तर

12

मुझे संदेह है कि यह एक बग है।इसके बजाए, ऐसा लगता है कि आप कंसोल की एक ज्ञात सीमा में चल रहे हैं। यह An Introduction to R की Section 1.8 - R commands, case sensitivity, etc. में कहते हैं:

कमान लाइनों कंसोल में प्रवेश किया 4095 के बारे में बाइट (नहीं वर्ण) तक ही सीमित हैं [3]।

[3] कुछ कंसोल आपको अधिक प्रवेश करने की अनुमति नहीं देंगे, और कुछ जो कुछ करते हैं, चुपचाप अतिरिक्त त्याग देंगे और कुछ इसे अगली पंक्ति की शुरुआत के रूप में उपयोग करेंगे।

या तो एक फ़ाइल और source उस में आदेश शब्दों में कहें, या (अल्पविराम के बीच) उचित बिंदुओं पर अपनी खुद की नई-पंक्तियों डालने से कई पंक्तियों में कोड तोड़ने। उदाहरण के लिए:

column_names <- 
    c("County Code/DFG/Aggregation Code", "District Code", "School Code", 
    "County Name", "District Name", "School Name", "DFG", "Special Needs", 
    "TOTAL POPULATION TOTAL POPULATION Number Enrolled LAL", ...) 
+0

शानदार - इसकी सराहना करें। आर/एस में अधिक अंतर्दृष्टि वाला कोई भी व्यक्ति जानता है कि 40 9 5 बाइट सीमा क्यों है? क्या यह कंसोल को स्टोर/हाउस करने के लिए उपयोग की जाने वाली डेटा संरचना की सीमाएं हैं? एक जानबूझकर डिजाइन निर्णय? – Andrew

+3

@Andrew: यह 'src/include/Defn.h' में हार्ड-कोड किया गया है: '# CONFOLE_BUFFER_SIZE 4096' परिभाषित करें, इसलिए यह डेटा संरचना की सीमा है। –

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