आर

2012-05-17 14 views
28

में एक वेक्टर के लिए अधिकतम लंबाई आर 'मेमोरी-सीमा' दस्तावेज के अनुसार, 2^31-1 से अधिक लंबाई के वेक्टर आवंटित करना संभव नहीं है। ऐसा इसलिए है क्योंकि एक इंडेक्स के रूप में उपयोग किया गया पूर्णांक केवल 31 बिट्स (साइन के लिए एक बिट) का उपयोग कर सकता है। लेकिन 64-बिट सिस्टम पर, मुझे लंबे वैक्टर आवंटित करने में सक्षम होना चाहिए। आर 64-बिट सिस्टम पर समान अधिकतम लंबाई क्यों लगाता है? सीमा को रोकने के लिए कोई रास्ता है?आर

+7

ध्यान दें कि यह सीमा R-3.0.0 में हटा दी गई थी। –

उत्तर

24

यदि आप आर के विकास संस्करण के साथ काम करने के इच्छुक हैं, तो आप इस सुविधा के लिए प्रयोगात्मक समर्थन प्राप्त कर सकते हैं। http://stat.ethz.ch/R-manual/R-devel/doc/html/NEWS.html से: - 64-बिट प्लेटफॉर्म पर 1 तत्वों

लंबी वैक्टर

2^31 से अधिक समय वैक्टर के लिए समर्थन की शुरुआत कर रहे हैं। यह कच्चे, तार्किक, पूर्णांक, डबल, जटिल और चरित्र वैक्टर, साथ ही सूचियों पर भी लागू होता है। ( तत्व वैक्टर 2^31 - 1 बाइट तक सीमित रहते हैं।)

सभी पहलुओं वर्तमान में प्रयोगात्मक हैं।

इस तरह के वैक्टरों के साथ क्या किया जा सकता है वर्तमान में कुछ हद तक सीमित है, और अधिकांश ऑपरेशन त्रुटि 'लंबे वैक्टर को वापस नहीं लौटाएंगे अभी तक समर्थित नहीं है'। उन्हें serialized और unserialized, जबरदस्ती, समान() और object.size() काम और साधनों की गणना की जा सकती है। उनकी लंबाई हो सकती है और xlength() द्वारा सेट किया गया है: एक लंबे वेक्टर पर कॉलिंग लम्बाई() एक त्रुटि फेंक देगा।

अनुक्रमण के अधिकांश पहलू उपलब्ध हैं। 1.

अधिक जानकारी के लिए लिंक देखें - आम तौर पर डबल-मूल्यवान सूचकांक 2^31 से परे तत्वों का उपयोग करने के लिए इस्तेमाल किया जा सकता है। मैंने इस बारे में बिल्कुल प्रयोग नहीं किया है, इसलिए मैं इस पर टिप्पणी नहीं कर सकता कि यह व्यावहारिक रूप से उपयोगी है या नहीं।

यदि आप http://developer.r-project.org/R_svnlog_2011 (और http://developer.r-project.org/R_svnlog_2012) पर जाते हैं और "लंबे वैक्टर" की खोज करते हैं तो आप उस काम की भावना प्राप्त कर सकते हैं जो चल रहा है।

+6

एसवीएन लॉग के माध्यम से स्कैन करने के लिए महान सुझाव। यह देखते हुए कि यह अनिवार्य रूप से "रिपली, रिपली, रिपली, ..." है जो काम कर रहा है मुझे [इस पोस्ट] (http://dirk.eddelbuettel.com/blog/2007/08/11/) की याद दिलाता है दिन। –

15

यहां कुछ और विवरण दिए गए हैं जो बेन के उत्तर का पूरक होंगे। आर, विशेष रूप से (स्पष्ट रूप से) फोरट्रान कोड बनाने के लिए उपयोग की जाने वाली निचली स्तर की प्रोग्रामिंग भाषाओं से सीमाएं विरासत में मिलती हैं। तो, जाहिर है, आर को संक्रमण करना ताकि यह 64-बिट एड्रेसिंग सिस्टम का पूर्ण लाभ ले सके, यह एक प्रमुख परियोजना होगी।

64-बिट आर के बनाता है पर यहां तक ​​कि वहाँ आर वस्तुओं के आकार पर सीमा (सहायता ("मेमोरी सीमा" देखें), जिनमें से कुछ के उपयोग के कारण उत्पन्न होती हैं:

R-admin manual से

32-बिट पूर्णांक (विशेष रूप से फ़ोरट्रान कोड में)। आर के सभी निर्माण पर, वेक्टर की अधिकतम लंबाई (तत्वों की संख्या) 2^31-1, लगभग 2 बिलियन है, और 64-बिट पर ब्लॉक का आकार बनाता है आवंटित स्मृति 2^34-1 बाइट्स (8 जीबी) तक सीमित है। यह अनुमान लगाया जाता है कि इन्हें अंततः उठाया जाएगा * लेकिन 8 जीबी वस्तुओं की आवश्यकता असाधारण है (जब यह 2011 में लिखा गया था) असाधारण।

(मैनुअल में एक फूट फुटनोट भी है, जहां मैंने * डाल दिया है, यह नोट करते हुए कि "यह टिप्पणी 2005 से मैनुअल में है"। :)