मैं आर में बड़ी वस्तुओं का उपयोग करने की कोशिश कर रहे मुद्दों में भाग रहा हूं। उदाहरण के लिए:
> memory.limit(4000)
> a = matrix(NA, 1500000, 60)
> a = matrix(NA, 2500000, 60)
> a = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb
> a = matrix(NA, 2500000, 60)
Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore
> rm(list=ls(all=TRUE))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there is room for
मैं समझता हूं कि यह स्मृति के सन्निहित ब्लॉकों को प्राप्त करने की कठिनाई से संबंधित है ( यहाँ से ):
त्रुटि संदेश शुरू करने वाले आकार के वेक्टर को आवंटित नहीं कर सकते हैं या तो स्मृति प्राप्त करने में विफलता का संकेत देते हैं, या तो क्योंकि आकार एक प्रक्रिया के लिए पता-स्थान की सीमा को पार कर गया है या अधिक संभावना है, क्योंकि सिस्टम मेमोरी प्रदान करने में असमर्थ था। ध्यान दें कि 32-बिट बिल्ड पर अच्छी तरह से उपलब्ध मुफ्त मेमोरी हो सकती है, लेकिन पता स्थान का एक बड़ा पर्याप्त सन्निहित ब्लॉक नहीं है जिसमें इसे मैप करना है।
मैं इसके पास कैसे आ सकता हूं? मेरी मुख्य कठिनाई यह है कि मुझे अपनी स्क्रिप्ट में एक निश्चित बिंदु मिलता है और आर किसी वस्तु के लिए 200-300 एमबी आवंटित नहीं कर सकता है ... मैं वास्तव में ब्लॉक को पूर्व-आवंटित नहीं कर सकता क्योंकि मुझे अन्य प्रसंस्करण के लिए मेमोरी की आवश्यकता है। ऐसा तब भी होता है जब मैं बेकार की वस्तुओं को हटा देता हूं।
संपादित करें: हाँ, क्षमा करें: Windows XP SP3, 4Gb RAM, R 2.12.0:
> sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_Caribbean.1252 LC_CTYPE=English_Caribbean.1252
[3] LC_MONETARY=English_Caribbean.1252 LC_NUMERIC=C
[5] LC_TIME=English_Caribbean.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
Calloc
और Free
मेमोरी कर सकता है , लेकिन मुझे संदेह है कि यह बेंजामिन क्या नहीं कर रहा है।