2013-02-26 24 views
10

क्या स्मृति स्मृति चेतावनी मेरे आर विश्लेषण को प्रभावित करती है?आर मेमोरी सीमा चेतावनी बनाम "आवंटित करने में असमर्थ ..."

जब आर में एक बड़े डेटा विश्लेषण स्क्रिप्ट चलाने मैं जैसा एक चेतावनी कुछ पाने:

In '... ' reached total allocation of ___Mb: see help...

लेकिन मेरी स्क्रिप्ट त्रुटि के बिना जारी है, सिर्फ चेतावनी। अन्य डेटा सेट के साथ मैं की तरह एक त्रुटि कुछ पाने:

Error: cannot allocate vector of size ___Mb:

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

+0

आप किस मंच/ओएस का उपयोग कर रहे हैं? 'Sys.info() [" मशीन "]' और '। प्लेटफार्म $ OS.type' चलाएं। क्या यह विंडोज के तहत 32 बिट आर है? –

+0

यह 64-बिट विंडोज 7 एंटरप्राइज़ संस्करण (x86-64, विंडोज़) है। मशीन में 20 जीबी मेमोरी है, लेकिन जब मैं 1 9 000 एमबी आवंटित करता हूं तो मुझे वही चेतावनी मिलती है। मेरी स्क्रिप्ट में एक अनुभाग है जहां स्मृति एक मुद्दा है और मैं पूर्ण 18000 एमबी का उपयोग करता हूं (विंडोज़ टास्क मैनेजर में भी दिखाता है)। मुझे कई टेक्स्ट फ़ाइलों को आयात और गठबंधन करने की आवश्यकता है, कुछ गणनाएं चलाएं, और फिर इसे छोटे टुकड़ों में तोड़ने से पहले डेटा को पुनर्व्यवस्थित करें। – GregS

+2

आप अपने सिस्टम में सभी मेमोरी आवंटित करने का प्रयास कर सकते हैं। आर ओएस द्वारा पहले से उपयोग में आने वाली स्मृति चोरी नहीं कर सकता है। मुझे यकीन नहीं है कि आपके कोड के मेमोरी गहन हिस्सों के दौरान 'जीसी()' का उदार उपयोग मदद कर सकता है? –

उत्तर

8

रास्ता वापस R 2.5.1 news में मैं स्मृति आवंटन चेतावनी को यह संदर्भ पाया:

malloc.c has been updated to version 2.8.3. This version has a slightly different allocation strategy, and is likely to work a little better close to address space limits but may give more warnings about reaching the total allocation before successfully allocating.

इस नोट के आधार पर, मैं परिकल्पना (भीतरी कार्यान्वयन के किसी भी उन्नत ज्ञान के बिना) है कि चेतावनी दी गई है जब स्मृति आर में आवंटन कॉल (malloc.c) स्मृति आवंटित करने के प्रयास में असफल रहा। मेमोरी आवंटित करने के लिए कई प्रयास किए जाते हैं, संभवतः विभिन्न विधियों का उपयोग करके, और संभवतः कचरा कलेक्टर को कॉल के साथ। केवल malloc काफी निश्चित है कि आवंटन नहीं बनाया जा सकता है, यह एक त्रुटि लौटाएगा।

चेतावनी मौजूदा आर ऑब्जेक्ट्स से समझौता नहीं करती है। वे सिर्फ उपयोगकर्ता को सूचित करते हैं कि आर कंप्यूटर मेमोरी की सीमाओं के करीब है।

(मुझे उम्मीद है कि एक और जानकार उपयोगकर्ता इसकी पुष्टि कर सकता है ...)

+1

यह वास्तव में ऐसा मामला प्रतीत होता है जब आर चेतावनी जारी करते समय कचरा कलेक्टर को बुलाता है। सफल आवंटन के लिए कुछ चेतावनियां और जीसी संदेशों का निरीक्षण करने के लिए आप लॉगिंग को सक्षम करने के लिए 'gcinfo (TRUE)' का उपयोग कर सकते हैं और सावधानी से सीमा के चारों ओर स्मृति आवंटित कर सकते हैं। – Jerzy

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