2011-11-03 19 views
21

इससे पहले कि मैं आर-2.14 में अपग्रेड करता हूं, मैं अपने स्थापित संकुल की फ़ोल्डर संरचना को तर्कसंगत बनाने का अवसर लेना चाहता हूं।आर में एकाधिक पैकेज स्थानों (फ़ोल्डर्स) का प्रबंधन कैसे करें?

फिलहाल मैं आर डिफ़ॉल्ट का उपयोग करता हूं, यानी सभी नए स्थापित पैकेज R_LIBS_USER पर जाते हैं। हालांकि, मैं वास्तव में पैकेज के दो वर्गों के बीच अंतर करता हूं:

  • पैकेज जो मैं बार-बार अपने काम करने के लिए उपयोग करता हूं, उदाहरण के लिए plyr, data.table, आदि
  • संकुल मैं के साथ प्रयोग करने के लिए सिर्फ स्थापित (अक्सर एक सवाल दोहराने के लिए या StackOverflow पर जवाब)

install.packages के बाद से एक प्रदान करता है एक lib तर्क निर्दिष्ट करने का विकल्प, यह स्पष्ट रूप से संभव है।

पैकेज स्थानों को प्रबंधित करने का कोई आसान तरीका है, उदा। .RProfile या RProfile.Site में कुछ समझदार सेटिंग्स/रैपर फ़ंक्शन बनाकर?

+1

यहां [एक संबंधित और उपयोगी क्यू एंड ए] है (http://stackoverflow.com/questions/2988559/how-do-you-use-multiple-versions-of-the-same-r-package)। – Iterator

उत्तर

20

हैडली का उत्कृष्ट पैकेज devtools एक फ़ंक्शन dev_mode प्रदान करता है।
http://www.inside-r.org/packages/cran/devtools/docs/dev_mode

यहाँ आप एक उदाहरण के उपयोग पा सकते हैं: https://gist.github.com/1150934

असल में,

dev_mode(TRUE, path = "anywhere-you-want-to-install") 
install.packages("anything-that-you-want-to-install") 

एक सशक्त माध्यम है।

24

इसके लिए कई विकल्प हैं। मैंने पहली चीज को मेरी आरप्रोफाइल.site को निम्नलिखित पंक्ति में शामिल करने के लिए अनुकूलित किया था, जिससे मेरी डिफ़ॉल्ट लाइब्रेरी पथ एक निर्देशिका को मेरी आर स्थापना में शामिल नहीं किया गया था।

.libPaths(c("D:/R/Library",.libPaths())) 

यह D:/R/Library अन्य पथ खोने के बिना मेरा डिफ़ॉल्ट पथ बनाता है। आप उस पर दो पथ जोड़ सकते हैं, D:/R/Library/Work और D:/R/Library/Test कहें। जो पहली स्थिति में डालता है वह डिफ़ॉल्ट होता है यदि आप install.packages() में lib निर्दिष्ट नहीं करते हैं।

फिर आप अपने .profile.site में दो चर निर्दिष्ट कर सकते हैं। इन्हें बेस नेमस्पेस में असाइन किया गया है, और इसलिए हमेशा सुलभ और ls() द्वारा नहीं हटाया जाता है। जैसे

.libwork <- 'D:/R/Library/Work' 
.libtest <- 'D:/R/Library/Test' 

कुछ है जो आप की तरह पैकेज इंस्टॉल करने की अनुमति देता है:

install.packages('aPackage',lib=.libwork) 

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

+0

+1 ग्रेट टिप्स, जॉरीस। –

+3

इस दृष्टिकोण का उपयोग करते समय चेतावनी का एक नोट: 'आर सीएमडी चेक' के साथ पैकेजों की जांच/निर्माण/स्थापित करने की कोशिश करते समय जटिलताओं की ओर जाता है। इसका कारण यह है कि 'आर सीएमडी चेक' और 'आर सीएमडी बिल्ड' 'आरप्रोफाइल' नहीं पढ़ता है (http://cran.r-project.org/doc/manuals/R-exts.html# चेकिंग- और- इमारत-संकुल)। – Andrie

4

आप पर्यावरण परिवर्तनीय R_LIBS में पथों की कॉलन से अलग सूची के माध्यम से कई लाइब्रेरी पथ/पेड़ निर्दिष्ट करने में सक्षम होना चाहिए। मैं आर 2.13.1-पैच पर भरोसेमंद काम करने के लिए नहीं मिला - यह केवल पहली प्रविष्टि लेता है। मुझे R_LIBS और R_LIBS_USER मिल गया है ताकि मैं अपने सिस्टम पर भरोसेमंद काम कर सकूं - मैं आमतौर पर केवल पूर्व निर्धारित करता हूं।

.libPaths() लाइब्रेरी पेड़ों की खोज के लिए नए पथ जोड़ सकते हैं। प्रत्येक सत्र के लिए प्रासंगिक पेड़ जोड़ने के लिए मैं अपने .Rprofile में .libPaths(new) पर उचित कॉल जोड़ूंगा। फिर आप चुन सकते हैं कि इंस्टॉल समय पर पैकेज कहां इंस्टॉल करें - यानी किस पेड़ का उपयोग करना है।

+0

यहां वही अनुभव है। यही कारण है कि मैं इन्हें सेट करने के लिए .libPaths() का उपयोग करता हूं। इसके अलावा install.packages() डिफ़ॉल्ट रूप से .libPaths() का पहला मान लेता है। मैंने पर्यावरण चर के साथ झुकाव से बस इतना आसान पाया। –

2

उत्तर देने के लिए, मुझे थोड़ा सा संदर्भ देना होगा।

पुनरुत्पादन के प्रयोजनों के लिए, मैं अपने पूरे आर सेटअप सहित चीजों को स्क्रिप्ट करने का प्रयास करता हूं। मेरे पास एक स्क्रिप्ट "startizeR.r" है, जो कि अन्य चीजों के साथ, संकुल स्थापित करती है, और मैंने बंडलों में संकुल व्यवस्थित किए हैं, जैसे कि कैशिंग से संबंधित, विज़ुअलाइज़ेशन, नमूनाकरण, स्थानिक आंकड़े इत्यादि से संबंधित - मेरा अपना छोटा कार्य विचार, यदि आप करेंगे।

# Profiling & testing 
Packages$CodingTools = c("codetools","debug", "profr","proftools","RUnit") 

मैं एक "मेजर" पैकेज (या प्राथमिक) सूची में बंडलों के कुछ गठबंधन और दूसरों "माध्यमिक" सूची में जाने:

उदाहरण के लिए, यहाँ एक टुकड़ा है। मुझे प्राथमिक सूची में सबकुछ इंस्टॉल करना सुनिश्चित है - मेरी उचित स्क्रिप्ट्स, फ़ंक्शंस और पैकेज इत्यादि का उपयोग करने के लिए उचित आर पर्यावरण होना आवश्यक है (बीटीडब्ल्यू, कुछ पैकेज एकाधिक बंडलों को सौंपा गया है, लेकिन केवल कुछ ही; मैं एक समेकित सूची को संसाधित करने से पहले डी-डुप्लिकेट करता हूं।)

मैं फिर प्लेटफॉर्म विशिष्ट डिफ़ॉल्ट लाइब्रेरी निर्दिष्ट करता हूं, और वहां इंस्टॉल करता हूं। हालांकि, यह क्षमता विस्तारणीय है और प्रत्येक विचार को प्रत्येक पैकेज बंडल (या पैकेज) के लिए वैकल्पिक स्थानों को शामिल करने के लिए बढ़ाया जा सकता है: बस बंडल नाम से मानचित्र करें, उदा। एक अद्वितीय निर्देशिका (लाइब्रेरी पथ) में "कोडिंगटूल", "डी:/आर/लाइब्रेरी/कोडिंगटूल" कहें। यह शुरुआती स्क्रिप्ट में किया जा सकता है, मिलान सूची & डिफ़ॉल्ट विकल्प के साथ, या स्थान कहीं और संग्रहीत किया जा सकता है, जैसे हैश तालिका, JSON, या डेटाबेस।

जैसा कि अन्य ने कहा है, डिफ़ॉल्ट लाइब्रेरी पथों को आर को सूचित करने की आवश्यकता है। यह RProfile.site में किया जा सकता है। मेरे मामले में, मेरे पास एक और स्क्रिप्ट है जिसका उपयोग आर इंस्टेंस को आरंभ करने के लिए किया जाता है जैसा कि मुझे यह पसंद है। मैं बाहरी पैरामीटर फ़ाइलों से बचने की कोशिश करता हूं जो आर (उदा। आरप्रोफाइल) द्वारा पढ़े जाते हैं, और इसके बजाय मेरे अपने पैकेज में फ़ंक्शन कॉल के माध्यम से सभी प्रारंभिक कार्य करते हैं (हालांकि पैरामीटर अभी भी बाहरी हैं)। यह मेरे काम को डीबग और पुन: पेश करने में आसान बनाता है। इसलिए, मेरे लाइब्रेरी पथ को उसी प्रकार के JSON में शामिल किया जा सकता है जहां मेरे डेटा फ़ाइल स्थान निर्दिष्ट हैं।

व्यक्तिगत रूप से, मैं स्क्रिप्ट के अंदर बंडलों को परिभाषित करने से दूर जाना चाहता हूं और इसके बजाय JSON का उपयोग करना चाहता हूं, क्योंकि मैं अलग-अलग सेटअप कॉन्फ़िगरेशन के लिए अलग-अलग JSON फ़ाइलों को आसानी से बना सकता हूं। मैं पहले से ही पुनरुत्पादित काम के अन्य प्रयोजनों के लिए ऐसा करता हूं।

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