2011-08-07 12 views
6

का उपयोग करके मिश्रित प्रकार के कॉलम के साथ बड़ी सीएसवी फ़ाइल कैसे लोड करें, 200 एमबी में पढ़ने के लिए बड़े पैमाने पर पैकेज से स्कैन() और read.big.matrix() के उपयोग को गठबंधन करने का कोई तरीका है .csv मिश्रित प्रकार के कॉलम के साथ फ़ाइल करें ताकि परिणाम पूर्णांक, चरित्र और संख्यात्मक कॉलम के साथ डेटाफ्रेम हो?bigmemory पैकेज

+1

क्या यह बड़े पैमाने पर पैकेज होना चाहिए?मुझे इस तरह के सामान – mdsumner

+0

@mdsumner सही रास्ते पर एफएफ अधिक उपयोगी लगता है। क्या इसे फ़ाइल-बैक होने की भी आवश्यकता है? 200 एमबी के लिए, मैं इसे पढ़ता हूं, इसके साथ काम करता हूं, फिर इसे 1 या अधिक बीएम फाइलों (या यदि आप चाहें तो 'एफएफ' में) के रूप में सहेजें। – Iterator

उत्तर

3

सहायता फ़ाइल के अनुसार, नहीं।

फ़ाइलों में केवल एक परमाणु प्रकार होना चाहिए (उदाहरण के लिए सभी पूर्णांक)। आप, उपयोगकर्ता को पता होना चाहिए कि आपकी फ़ाइल में पंक्ति और/या कॉलम नाम हैं, और विकल्पों के विभिन्न संयोजन में वांछित व्यवहार प्राप्त करने में सहायक होना चाहिए।

मैं इस पैकेज/फ़ंक्शन से परिचित नहीं हूं, लेकिन आर में, मैट्रिस में केवल एक परमाणु प्रकार हो सकता है (उदा। डेटा.फ्रेम के विपरीत)।

+0

आपके दो सेंट के लिए धन्यवाद। इस ब्लॉग पर, http://joshpaulson.wordpress.com/2010/12/20/michael-kane-on-bigmemory/ किसी ने सुझाव दिया कि मैट्रिस की सीमा के लिए एक कामकाज जिसमें केवल एक परमाणु प्रकार है (एक विशेषता जिसे बड़े पैमाने पर विरासत में मिला है। मैट्रिक्स) स्कैन() का उपयोग करना है। मैं उम्मीद कर रहा था कि कोई बड़े पैमाने पर पैकेज से read.big.matrix के साथ अपने अनुभव साझा कर सकता है, खासतौर पर मिश्रित प्रकार के स्तंभों में पढ़ने के संबंध में और क्या उन्होंने स्कैन() का उपयोग किया है। – Lourdes

+0

शायद आप प्रसंस्करण चरण में ऐसा कर सकते हैं, लेकिन मैं गलत साबित करना चाहता हूं (सेंसू @ इटरेटर)। –

9

इसके लिए एफएफ पैकेज आज़माएं।

library(ff) 
help(read.table.ffdf) 

समारोह 'read.table.ffdf' 'ffdf' वस्तुओं, बहुत बहुत पसंद है (और उपयोग करते हुए) 'read.table' में फ्लैट फ़ाइलें अलग पढ़ने। यह भी 'read.csv' जैसी किसी भी सुविधा रैपर के साथ काम कर सकता है और आर के सामान्य रैपर के लिए अपनी सुविधा रैपर (उदा। 'Read.csv.ffdf') प्रदान करता है।

200 एमबी के लिए यह इस तरह के काम के रूप में सरल होना चाहिए।

x <- read.csv.ffdf(file=csvfile) 

(बहुत बड़ा फ़ाइलों के लिए यह संभावना की आवश्यकता होगी कि आप विन्यास विकल्पों में से कुछ, अपने मशीन और ओएस के आधार पर जांच)।

+0

धन्यवाद mdsummer। मैंने एफएफ पैकेज की कोशिश की, लगभग 300 एमबी डेटासेट में पढ़ने में सक्षम था जिसे मैंने किसी ऑब्जेक्ट में संग्रहीत किया जिसे मैंने बाद में डेटा डेटा फ्रेम में as.data.frame के साथ जोड़ा। हालांकि, इसने इतनी मेमोरी खाई कि विश्लेषण के लिए थोड़ा छोड़ दिया गया था। हालांकि यह एक अच्छी शुरुआत थी और एक उपयोगी सुझाव था। – Lourdes

+0

संपूर्ण बिंदु यह सब लोड नहीं करना है, लेकिन एफएफ पैकेज की स्मृति-मैप की गई सुविधाओं का उपयोग करना है। एफएफ डेटा संरचनाओं – mdsumner

6

आह, कुछ ऐसी चीजें हैं जो इस जीवन में असंभव हैं, और कुछ ऐसे हैं जो गलत समझा जाता है और अप्रिय परिस्थितियों का कारण बनता है। @रमन सही है: एक मैट्रिक्स एक परमाणु प्रकार का होना चाहिए। यह डेटाफ्रेम नहीं है।

चूंकि एक मैट्रिक्स एक प्रकार का होना चाहिए, इसलिए कई प्रकारों को संभालने के लिए bigmemory स्नूकर करने का प्रयास करना स्वयं ही एक बुरी चीज है। क्या यह किया जा सकता है? मैं वहां नहीं जा रहा हूँ। क्यूं कर? क्योंकि बाकी सब कुछ मान लेगा कि यह एक मैट्रिक्स प्राप्त कर रहा है, डेटाफ्रेम नहीं। इससे अधिक प्रश्न और अधिक दुख आएगा।

अब, आप क्या कर सकते हैं प्रत्येक कॉलम के प्रकारों की पहचान करना, और विशिष्ट bigmemory फ़ाइलों का एक सेट उत्पन्न करना, प्रत्येक में एक विशेष प्रकार के आइटम शामिल हैं। जैसे charBM = चरित्र बड़ा मैट्रिक्स, intBM = पूर्णांक बड़ा मैट्रिक्स, और इसी तरह। फिर, आप एक रैपर विकसित करने में सक्षम हो सकते हैं जो इस सब से डेटा फ्रेम तैयार करता है। फिर भी मैं इसकी अनुशंसा नहीं करता हूं: एक अलग डेटाफ्रेम ग्रिफिन बनाने की कोशिश करने के बजाए, अलग-अलग वस्तुओं को उनके जैसा व्यवहार करें, या यदि आप कर सकते हैं तो एकरूपता को सहकारिता दें।

@mdsumner ff का सुझाव देने में सही है। एक अन्य स्टोरेज विकल्प एचडीएफ 5 है, जिसे आप आर में ncdf4 के माध्यम से एक्सेस कर सकते हैं दुर्भाग्यवश, ये अन्य पैकेज bigmemory के रूप में सुखद नहीं हैं।

+0

धन्यवाद Iterator से भागों निकालने के लिए उपकरण हैं। आप सही हैं, अन्य पैकेज बड़े पैमाने पर सुखद नहीं हैं। – Lourdes

0

सबसे अच्छा समाधान फ़ाइल लाइन को लाइन से पढ़ना और इसे पार्स करना है, इस तरह रीडिंग प्रक्रिया लगभग रैखिक स्मृति की मात्रा पर कब्जा कर लेगी।

+0

स्टैक ओवरव्लो में आपका स्वागत है! हालांकि, यह सवाल का जवाब नहीं देता है, जिसे विशेष रूप से बड़े पैमाने पर पैकेज के उद्देश्य से किया गया था –