आर

2013-04-05 5 views
11

में कुशल स्मृति प्रबंधन मैं (विंडोज 7 प्रो 64 बिट) मेरी मशीन में 6 जीबी मेमोरी और अनुसंधान में, मैंआर

> memory.limit() 
6141 
बेशक

मिलता है, जब बड़े डेटा के साथ काम कर, स्मृति आवंटन त्रुटि तब होती है। तो क्रम आभासी स्मृति का उपयोग करने के आर बनाने के लिए, मैं

> memory.limit(50000) 

का उपयोग अब, जब मेरी स्क्रिप्ट चल रहा है, मैं स्मृति आवंटन त्रुटि किसी भी अधिक की जरूरत नहीं है, लेकिन आर हॉग सभी अपने कंप्यूटर में स्मृति तो मैं कर सकते हैं स्क्रिप्ट समाप्त होने तक मशीन का उपयोग न करें। मुझे आश्चर्य है कि मशीन को आर प्रबंधित करने के लिए बेहतर तरीका है या नहीं। मुझे लगता है कि यह कुछ ऐसा कर सकता है वर्चुअल मेमोरी का उपयोग करना अगर यह निर्दिष्ट उपयोगकर्ता से अधिक भौतिक स्मृति का उपयोग कर रहा है। क्या ऐसा कोई विकल्प है?

उत्तर

9

देखो। यह उन कार्यों का उपयोग करता है जो आर ऑब्जेक्ट्स के बारे में जानते हैं ताकि वे ओएस को छोड़ने के बजाय डिस्क पर रख सकें (जो सिर्फ स्मृति के टुकड़ों के बारे में जानता है, लेकिन वे जो प्रतिनिधित्व करते हैं)।

5

आर मशीन की स्मृति का प्रबंधन नहीं करता है। यह ऑपरेटिंग सिस्टम की ज़िम्मेदारी है। एकमात्र कारण memory.size और memory.limit विंडोज पर मौजूद हैं, क्योंकि (help("Memory-limits") से) है:

Under Windows, R imposes limits on the total memory allocation 
available to a single session as the OS provides no way to do so: 
see 'memory.size' and 'memory.limit'. 

आर भी वस्तुओं रैम में सन्निहित अंतरिक्ष पर कब्जा करने, ताकि आप केवल कुछ बड़ी वस्तुओं के साथ स्मृति आवंटन समस्या आती है सकते हैं। आप संभवतः आपके द्वारा बनाए गए ऑब्जेक्ट्स की संख्या/आकार के साथ और अधिक मेमोरी का उपयोग करने से बचने के लिए अधिक सावधान रह सकते हैं।

+0

या अधिक रैम में निवेश करें। – Roland

3

यह एक समाधान नहीं है लेकिन एक सुझाव है। जहां भी संभव हो स्मृति स्मृति वस्तुओं का उपयोग करें: उदाहरण के लिए, डेटा.फ्रेम के बजाय मैट्रिक्स का उपयोग करें। एफएफ और bigmemory संकुल पर

एक उदाहरण यहाँ

m = matrix(rnorm(1000), 2, 2) 
d = as.data.frame(m) 
object.size(m) 
232 bytes 
object.size(d) 
808 bytes 
+3

यह उदाहरण केवल बहुत छोटे निश्चित डेटा आवंटन अंतर को हाइलाइट करता है। 'M = matrix (rnorm (1000), 20000, 10) होने के लिए मैट्रिक्स लें और ऑब्जेक्ट्स के बीच आकार अंतर नगण्य हो जाते हैं। वास्तव में मेरे वर्कस्पेस में कुछ यादृच्छिक 'data.frame' के लिए यह जांच रहा था,' मैट्रिक्स 'संस्करण 2 गुना बड़ा था। तो मुझे नहीं लगता कि यह सुझाव हाथ में समस्या के लिए उपयोगी है। – eddi

+1

नहीं। मैं असहमत हूं। मैट्रिक्स डेटा.फ्रेम से अधिक कुशल हैं। यही कारण है कि आंतरिक रूप से, बहुत से आर फ़ंक्शन डेटा फ्रेम में मौजूद मैट्रिक्स डेटा को सह-प्रसारित करेंगे। मैं स्पष्ट रूप से उल्लेख करता हूं कि यदि आपका उत्तर है तो मेरा जवाब सिर्फ एक सुझाव है। आपकी दूसरी टिप्पणी के लिए (यादृच्छिक डेटा.फ्रेम छोटे मैट्रिक्स संस्करण के बाद) मुझे लगता है कि यह गलत है। – agstudy

+0

मैं अपने कार्यक्षेत्र में एक विशिष्ट 'data.frame' के लिए देखता हूं। 'object.size (as.data.frame (rec)): 11542192 बाइट्स' और 'object.size (as.matrix (rec)): 26516160 बाइट्स'। – eddi