मैं एक समारोह है कि में पढ़ने के लिए और फिर एक data.table लौट कहा जाता है बनाया है:आर में डेटा.table या data.frame लौटने पर स्मृति आवंटन के दोहराव से बचने के लिए चालें?
read.in.data <- function(filename)
{
library(data.table)
data.holder<-read.table(filename, skip=1)
return(data.table(data.holder))
}
मैं समारोह प्रक्रियाओं आर 2 चरणों में इस पर कार्रवाई करने के लगता है कि के रूप में मेरे राम को देख से देखा है (या कम से कम यह क्या हो रहा है के लिए मेरा सबसे अच्छा अनुमान है)। उदाहरण के लिए, जब मैं 1.5 जीबी फ़ाइल (प्रति पंक्ति कुल 136 वर्णों के साथ 15 कॉलम) लोड करता हूं, तो आर 1 में लगता है) डेटा में पढ़ा जाता है और 1.5 जीबी रैम का उपयोग करता है, और फिर 2) 1.5 जीबी रैम का उपयोग करें वापसी।
रहे हैं वहाँ (उस बात के लिए या data.frame) एक data.table बनाने के लिए एक समारोह बनाने के लिए कुछ चाल और स्मृति में दोहराव की आवश्यकता के बिना data.table वापसी? या मुझे उस तालिका के भीतर डेटाटेबल के लिए सभी प्रसंस्करण करना चाहिए जहां तालिका बनाई गई है?
टिप्पणियों: अगर मैं एक पंक्ति में दो बार इस कोड को चलाने के लिए, स्मृति साफ नहीं है; चूंकि मेरे पास केवल 8 जीबी रैम है, फ़ंक्शन विफल हो जाता है। यदि मैं एक चर में "read.table" को संग्रहीत करने के चरण को छोड़ देता हूं (जैसा कि नीचे दिखाया गया है), मुझे कोई लाभ नहीं मिलता है। मैं इसे किसी भी तरह से नहीं करना चाहता, क्योंकि मैं इसे वापस करने से पहले डेटा.table को साफ़ करने की क्षमता रखना चाहता हूं। मेरी समस्या का एक फिक्स मुझे स्मृति से बाहर किए बिना बड़ी फ़ाइलों को संसाधित करने में सक्षम बनाता है।
short.read.trk <- function(fntrk)
{
library(data.table)
return(data.table(read.table(fntrk, skip=1)))
}
मुझे आपका दर्द महसूस होता है। V1.8.7 में fread() का प्रयास करें। यह सीधे डेटाटेबल बनाता है ताकि (प्रतिलिपि) डेटा.table() रैपर से बचा जा सके, साथ ही यह read.table से भी अधिक कुशल है (यहां तक कि सभी ज्ञात चाल लागू किए गए हैं)। –
धन्यवाद, मैं फ्रेड() की कोशिश करूंगा जैसे ही 1.8.7 में आर-फोर्ज पर निर्माण होगा (वर्तमान में "निर्माण में विफल" के रूप में सूचीबद्ध है)। – Docuemada
उफ़ - दे मुझे पता है के लिए धन्यवाद - मैं उसकी समीक्षा करेंगे ... –