मेरे पास एक ऐसा प्रोग्राम है जो CSV डेटा की लाइनों को आउटपुट करता है जिसे मैं डेटा फ्रेम में लोड करना चाहता हूं। मैं वर्तमान में तो जैसे डेटा लोड:डेटा फ्रेम में सीएसवी आउटपुट प्राप्त करने का सबसे तेज़ तरीका क्या है?
tmpFilename <- "tmp_file"
system(paste(procName, ">", tmpFilename), wait=TRUE)
myData <- read.csv(tmpFilename) # (I also pass in colClasses and nrows for efficiency)
हालांकि, मैं एक फाइल करने के लिए उत्पादन पुनः निर्देशित सोचा बस से अक्षम था (कार्यक्रम 30MB के बारे में पता थूक को पढ़ने के लिए, तो मैं अनुकूलतम प्रदर्शन के साथ संभाल करना चाहते हैं)। मैंने सोचा था कि textConnection
इस का समाधान होगा, इसलिए मैंने कोशिश की:
con <- textConnection(system(procName, intern=TRUE))
myData <- read.csv(con)
यह बहुत धीमी चलाता है, हालांकि, और जबकि पहले समाधान इनपुट आकार के साथ रैखिक खराब हो, textConnection
समाधान के प्रदर्शन खराब हो तेजी से ऐसा लगता है। सबसे धीमा हिस्सा textConnection
बना रहा है। read.csv
यहां वास्तव में पहले समाधान की तुलना में तेज़ हो जाता है क्योंकि यह स्मृति से पढ़ रहा है।
मेरा प्रश्न तब है, बस read.csv
चलाने के लिए फ़ाइल बना रहा है, यह गति के संबंध में मेरा सबसे अच्छा विकल्प है? क्या पाठ कनेक्शन के निर्माण को तेज करने का कोई तरीका है? बोनस: टेक्स्ट कनेक्शन क्यों धीमा कर रहा है?
ऐसा लगता है कि आप एक अतिरिक्त वेक्टर पूरे उत्पादन युक्त, 'प्रशिक्षु = TRUE' साथ बना रहे हैं। आउटपुट के उत्पादन के रूप में वह वेक्टर बढ़ता रहेगा, जो लगातार स्मृति आवंटित करेगा। यदि आप उस पंक्ति को दो आदेशों में विभाजित करते हैं, तो 'आउटपुट <- सिस्टम (procname, intern = TRUE); con <- textConnection (आउटपुट) ', मुझे अत्यधिक संदेह है कि' system' कमांड अधिकतर समय ले जाएगा। –
सही, इसलिए यदि मैं इसे विभाजित करता हूं, तो सबसे लंबा कथन 'टेक्स्टकनेक्शन (आउटपुट)' कॉल है। "सबसे लंबे समय तक", मेरा मतलब है कि 'सिस्टम' में कुछ सेकंड लगते हैं, 'read.csv' में कुछ और सेकंड लगते हैं,' टेक्स्टकनेक्शन() 'में 4 मिनट लगते हैं। – Hudon
वाह। यह ओएस क्या है? यदि यह लिनक्स है, तो मैं 'dev/shm' के तहत फ़ाइल बनाउंगा जो रैम के अलावा कुछ भी नहीं उपयोग करेगा। –