2012-11-02 10 views
7

मैं विंडोज 7 64-बिट, 8 जीबी रैम मशीन पर लगभग 500 एमबी डेटासेट पर एक मॉडल का अनुमान लगाने के लिए mboost पैकेज से ब्लैकबोस्ट फ़ंक्शन का उपयोग कर रहा हूं। निष्पादन के दौरान आर लगभग सभी उपलब्ध स्मृति तक उपयोग करता है। गणना के बाद, जीसी() के साथ कचरा संग्रह को कॉल करने के बाद भी 4.5 जीबी से अधिक आर को आवंटित किया जाता है या वर्कस्पेस को नए आर सत्र में सहेजने और पुनः लोड करने के बाद भी रखा जाता है। .ls.objects का उपयोग करना (1358003) मैंने पाया कि सभी दृश्यमान वस्तुओं का आकार लगभग 550 एमबी है।मैं आर वर्कस्पेस से अदृश्य वस्तुओं को कैसे हटा सकता हूं जिन्हें कचरा संग्रह द्वारा हटाया नहीं जाता है?

जीसी() के उत्पादन में मुझसे कहता है कि डेटा के थोक, कि क्या मतलब वेक्टर कोशिकाओं में है, हालांकि मुझे यकीन है कि नहीं कर रहा हूँ:

  used (Mb) gc trigger (Mb) max used (Mb) 
Ncells 2856967 152.6 4418719 236.0 3933533 210.1 
Vcells 526859527 4019.7 610311178 4656.4 558577920 4261.7 

यह मैं क्या कर रहा है:

> memory.size() 
[1] 1443.99 
> model <- blackboost(formula, data = mydata[mydata$var == 1,c(dv,ivs)],tree_control=ctree_control(maxdepth = 4)) 

... संकुल की एक गुच्छा लोड किए गए हैं ...

> memory.size() 
[1] 4431.85 
> print(object.size(model),units="Mb") 
25.7 Mb 
> memory.profile() 
    NULL  symbol pairlist  closure environment  promise language 
     1  15895  826659  20395  4234  13694  248423 
    special  builtin  char  logical  integer  double  complex 
     174  1572  1197774  34286  84631  42071   28 
character   ...   any  list expression bytecode externalptr 
    228592   1   0  79877   1  51276  2182 
    weakref   raw   S4 
     413   417  4385 

MyData [MyData $ वर == 1, सी (DV, IVS)] 139,593 पंक्तियों और 75 colum है एनएस ज्यादातर कारक चर और कुछ तार्किक या संख्यात्मक चर के साथ। फॉर्मूला इस प्रकार का सूत्र सूत्र है: "dv ~ var2 + var3 + .... + var73"। डीवी एक परिवर्तनीय नाम स्ट्रिंग है और ivs सभी स्वतंत्र चर var2 के साथ एक स्ट्रिंग वेक्टर है ... var74।

आर को इतना स्मृति आवंटित क्यों की जा रही है? मैं अतिरिक्त मेमोरी को मुक्त कैसे कर सकता हूं? किसी भी विचार की सराहना की!

+0

क्या करता है 'memory.size()' रिपोर्ट: वह पैकेज जीबीएम (जो मैं अपने परिणामों को दोहराने सकता है नहीं करने के लिए, अभी तक) या क्रमानुसार करने, कुछ इस तरह करने से उपयोग करने की सिफारिश? – James

+2

यह कोड में एक स्मृति रिसाव हो सकता है। क्या आप जिस फ़ंक्शन को कॉल कर रहे हैं उसका एक उदाहरण पेस्ट कर सकते हैं (डेमो डेटा के साथ)? – Spacedman

+0

'स्मृति रिसाव' से आपका क्या मतलब है? मैंने अपने प्रश्न में कुछ नमूना कोड जोड़ा। अगर आपको अधिक जानकारी चाहिए तो कृपया मुझे बताएं। @ जेम्स: मैंने अपने प्रश्न पर ब्लैकबोस्ट फ़ंक्शन से पहले और बाद में memory.size() आउटपुट जोड़ा। – Nima

उत्तर

2

मैंने पैकेज लेखकों में से एक से बात की है, जिन्होंने मुझे बताया कि मॉडल ऑब्जेक्ट से जुड़े अधिकांश डेटा वातावरण में सहेजे गए हैं, जो बताते हैं कि object.size द्वारा प्रेरित आर के पूर्ण स्मृति उपयोग को प्रतिबिंबित नहीं करता है ब्लैकबोस्ट समारोह। उन्होंने मुझे यह भी बताया कि मोबोस्ट पैकेज को गति और स्मृति दक्षता के संदर्भ में अनुकूलित नहीं किया गया था, लेकिन इसका उद्देश्य लचीलापन है, और यह कि सभी पेड़ बचाए गए हैं और इस प्रकार डेटा भी है, जो उत्पन्न होने वाली बड़ी मात्रा में डेटा बताता है (मुझे अभी भी लगता है आयाम उल्लेखनीय ..)।

### first M_1 iterations 
mod <- blackboost(...)[M_1] 
f1 <- fitted(mod) 
rm(mod) 
### then M_2 additional iterations ... 
mod <- blackboost(..., offset = f1)[M_2] 
0

जो मैं एकत्र कर सकता हूं, यह आर में जीसी() नहीं है, यह समस्या है, लेकिन तथ्य यह है कि स्मृति पूरी तरह से ओएस पर वापस नहीं आती है।

This thread कोई उत्तर नहीं प्रदान करता है, लेकिन यह इस मुद्दे की प्रकृति को प्रकाश देता है।