2012-01-14 22 views
19

के कई संस्करणों को स्थापित और प्रबंधित करने के लिए कैसे करें मैं एक समस्या के साथ पुन: उत्पादित कंप्यूटिंग के लिए एक ढांचा विकसित कर रहा हूं जिसमें एक समस्या है जिसके साथ मैं संघर्ष कर रहा हूं कि कुछ आर कोड पैकेज के संस्करण XY-Z में पूरी तरह से चल सकते हैं, लेकिन फिर आप इसे 3 साल बाद पुन: पेश करने का प्रयास क्यों करते हैं, पैकेज अपडेट हो गए हैं, कुछ फ़ंक्शन बदल दिए गए हैं, और कोड अब और नहीं चलता है। यह समस्या उदाहरण के लिए संकुचित करता है जो संकुल का उपयोग करते हैं।आर पैकेज

आत्मविश्वास से परिणामों को पुन: उत्पन्न करने का एकमात्र तरीका मूल संस्करण द्वारा उपयोग किए गए संकुल के आर संस्करण और संस्करण को स्थापित करना है। यदि यह एकमात्र मामला था, तो कोई भी सीआरएएन अभिलेखागार से सामान खींच सकता है और उपयुक्त संस्करण स्थापित कर सकता है। लेकिन मेरे ढांचे के लिए यह अव्यवहारिक है, और मुझे पैकेज संस्करणों को पूर्वस्थापित करने की आवश्यकता है।

अब मान लें कि मैं खुद को आर के एक संस्करण में प्रतिबंधित करता हूं, उदा। 2.14। आर पैकेज के कई संस्करणों को स्थापित करने का एक व्यावहारिक तरीका क्या होगा, ताकि मैं उन्हें फ्लाई पर लोड कर सकूं? मुझे लगता है कि मैं प्रत्येक पैकेज के प्रत्येक संस्करण के लिए अलग लाइब्रेरी निर्देशिका बनाने और फिर उन्हें लोड करते समय कस्टम lib.loc तर्कों का उपयोग करने जैसे कुछ कर सकता हूं। हालांकि यह गन्दा होने जा रहा है। कोई सुझाव या पिछले कुछ ऐसा करने के पिछले प्रयास?

मेरा ढांचा उबंटू सर्वर पर चलता है।

+0

क्या आप devtools पैकेज में dev_mode से परिचित हैं? आईआईआरसी यह एक समान समस्या से निपट रहा है। – baptiste

+0

वास्तव में नहीं। यह सिर्फ आपके libpath को कुछ अस्थायी sandbox dir में बदल देता है। लेकिन यह उससे परे कोई भी प्रणाली प्रदान नहीं करता है। – Jeroen

+0

यह एक डुप्लिकेट है। http://stackoverflow.com/questions/8343686/how-to-install-2-different-r-versions-on-debian/8343739#8343739 – Oz123

उत्तर

4

आप संस्करणों के साथ पैकेज इंस्टॉल कर सकते हैं (उदा। foo के बजाय foo_1.0 निर्देशिका का नाम बदलें) और उन संस्करणों को सॉफ्टलिंक करें जिन्हें आप एक लाइब्रेरी में दिए गए आर + पैकेज स्नैपशॉट को फिर से बनाना चाहते हैं। जाहिर है, पैकेज वास्तव में एक अलग पेड़ में रह सकते हैं, इसलिए आपके पास library.projectX/foo ->library.all/foo/1.0 हो सकता है।

+0

इसके अतिरिक्त, आप उस प्रोजेक्ट –

-1

मैं वर्णन फ़ाइल को संशोधित करने का प्रयास करता हूं, और संस्करण संख्या जोड़कर वहां "पैकेज" फ़ील्ड को बदलता हूं।

उदाहरण के लिए, आप पैकेज स्रोत को CRAN पृष्ठ (http://cran.r-project.org/web/packages/pls/) से डाउनलोड करते हैं। एक संपीड़ित फ़ाइल (pls_2.3-0.zip) को एक निर्देशिका ("pls /") में अनपैक करें। निम्नलिखित चरणों में वर्णन नाम में पैकेज नाम को बदलना है ("pls/विवरण") और आर कमांड 'आर सीएमडी इंस्टाल pls /' के साथ संस्थापन, जहां 'pls /' संशोधित DESCRIPTION फ़ाइल के साथ पैकेज स्रोत का पथ है।

आर लाइब्रेरी पथ के साथ बजाना मेरे लिए एक खतरनाक चीज़ प्रतीत होता है।

+5

के लिए उचित निर्देशिका में पर्यावरण चर R_LIBS को बदल सकते हैं पैकेज नामों के साथ बजाना और भी खतरनाक है क्योंकि आप सभी निर्भरताओं को तोड़ते हैं। लाइब्रेरी पथ को पैकेज नामों के विपरीत खेला जाने के लिए डिज़ाइन किया गया है। –

1

ऑपरेटिंग सिस्टम आपको पूर्ण अलगाव के लिए और अधिक उपलब्ध हैं, और उपलब्ध लोगों के एक टन के रूप में डेबियन/उबंटू स्टैक देता है। दो के साथ मैंने खेला है

  • क्रोट वातावरण: हम मेजबान मशीनों से अलग निर्माण वातावरण को पूरा करने के लिए इसका उपयोग करते हैं। उदाहरण के लिए, मेरे द्वारा उत्पादित सभी डेबियन अपलोड मेरे amd64 उबंटू सर्वर पर होस्ट किए गए i386 Pbuilder chroot में बनाए गए हैं। क्रोट एक बहुत ही शक्तिशाली यूनिक्स सिस्टम कॉल है। क्रोट्स, और विशेष रूप से इसके ऊपर बनाए गए पिबिल्डर सिस्टम (डेबियन पैकेज बिल्डिंग के लिए) हेडलेस संचालित करने के लिए हैं।

  • वर्चुअल मशीन: यह आपको पूर्ण सामान्यता देता है। मेरा बहुत शक्तिशाली बॉक्स आसानी से तीन वर्चुअल मशीनों को संभालता है: डेबियन i386, उबंटू i386 साथ ही विंडोज़ एक्सपी। इसके लिए, मैं वर्तमान में libvirt के साथ KVM का उपयोग करता हूं; यह लिनक्स विशिष्ट है। मैंने अतीत में वर्चुअलबॉक्स और वीएमवेयर का भी उपयोग किया है।

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