2010-11-08 18 views
7

मैं बड़ी डीएनए अनुक्रम फ़ाइलों (फास्टक फाइल, प्रत्येक गिगाबाइट्स प्रत्येक) का विश्लेषण करने के लिए आर का उपयोग करने की कोशिश कर रहा हूं, लेकिन इन फ़ाइलों के लिए मानक आर इंटरफ़ेस (शॉर्ट रीड) को पूरी फ़ाइल को एक बार में पढ़ना है। यह स्मृति में फिट नहीं है, इसलिए यह एक त्रुटि का कारण बनता है। क्या कोई तरीका है कि मैं एक समय में कुछ (हजार) लाइनें पढ़ सकता हूं, उन्हें एक मेमोरी फ़ाइल में रख सकता हूं, और उसके बाद उस स्मृति फ़ाइल से पढ़ने के लिए शॉर्टरेड का उपयोग कर सकता हूं?क्या आर में स्मृति फ़ाइलों को पढ़ने और लिखने का कोई तरीका है?

मैं पर्ल के आईओ :: अदिश की तरह कुछ के लिए देख रहा हूँ, आर

+0

असल में, मुझे नहीं लगता कि मैं इसके साथ अपनी समस्या का समाधान कर सकता हूं: प्रश्न में फ़ंक्शन (readFastq) एक फ़ाइल * नाम * चाहता है, इसलिए मुझे यकीन नहीं है कि मैं इसके बजाय मनमाना कनेक्शन पास कर सकता हूं। –

+0

मुझे लगता है कि आप जो खोज रहे हैं उसे इस पोस्ट के जवाब में वर्णित किया गया है: http://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r/1820610 मैं विशेष रूप से sqldf समाधान की तरह। –

उत्तर

2

ऐसा लगता है कि शॉर्टरेड जल्द ही "फास्टकस्ट्रीमर" वर्ग जोड़ने के लिए है जो मैं चाहता हूं।

2

के लिए मैं आर के बारे में ज्यादा पता नहीं है, लेकिन आप mmap package पर एक नज़र पड़ा है?

1

ठीक है, मैं readFastq एक फ़ाइल के अलावा कुछ स्वीकार करने के बारे पता नहीं है ...

लेकिन अगर यह, अन्य कार्यों के लिए, आप आर समारोह पाइप का उपयोग कर सकते कर सकते हैं() एक यूनिक्स कनेक्शन खोलने में, तो आप यूनिक्स कमांड के सिर और पूंछ और कुछ पाइप के संयोजन के साथ ऐसा कर सकते हैं।

उदाहरण के लिए, 90 से 100 लाइनों प्राप्त करने के लिए, तो आप इस का उपयोग करें:

head file.txt -n 100 | tail -n 10 

तो आप बस मात्रा में फ़ाइल पढ़ सकते हैं।

यदि आपको करना है, तो आप हमेशा एक अस्थायी फ़ाइल बनाने के लिए इन यूनिक्स उपयोगिताओं का उपयोग कर सकते हैं, फिर इसे संक्षिप्त पढ़ें। यह दर्द है लेकिन अगर यह केवल एक फाइल ले सकता है, कम से कम यह काम करता है।

1

संयोग से, आम तौर पर आर (जैसे पर्ल के आईओ :: स्केलर) में इन-मेमोरी फ़ाइल कैसे करें, इसका उत्तर textConnection फ़ंक्शन है। अफसोस की बात है कि, शॉर्ट रीड पैकेज टेक्स्टकनेक्शन ऑब्जेक्ट्स को इनपुट के रूप में संभाल नहीं सकता है, इसलिए जब मैंने छोटे-छोटे हिस्सों में फ़ाइल को इन-मेमोरी फाइलों में पढ़ने के सवाल में व्यक्त किया है, तो कुछ बिट्स के लिए थोड़ा सा पार्स किया जाता है, लेकिन कई अनुप्रयोगों के लिए निश्चित रूप से संभव है, लेकिन शॉर्टरेड को टेक्स्ट कनेक्शन पसंद नहीं होने के कारण विशेष एप्लिकेशन के लिए नहीं। तो समाधान ऊपर वर्णित FastqStreamer वर्ग है।

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

  • कोई संबंधित समस्या नहीं^_^