आर

2011-10-11 12 views
12

पर निर्भरता प्रबंधन परियोजना-विशिष्ट निर्भरताओं को सुविधाजनक बनाने के लिए आर पर निर्भरता प्रबंधन उपकरण है? मैं जावा के मैवेन, रूबी के बंडलर, पायथन के वर्चुअलनेव, नोड के एनपीएम इत्यादि जैसे कुछ ढूंढ रहा हूं।आर

मुझे विवरण फ़ाइल में "निर्भर" खंड के साथ-साथ R_LIBS सुविधा के बारे में पता है, लेकिन ये कुछ बहुत ही सामान्य वर्कफ़्लो का समाधान प्रदान करने के लिए संगीत कार्यक्रम में काम नहीं करना प्रतीत होता है।

मैं अनिवार्य रूप से एक परियोजना की जांच करने और परियोजना का निर्माण और परीक्षण करने के लिए एक ही आदेश चलाने में सक्षम होना चाहता हूं। कमांड को वैश्विक आर इंस्टॉलेशन को प्रभावित किए बिना किसी प्रोजेक्ट-विशिष्ट लाइब्रेरी में किसी भी आवश्यक पैकेज को स्थापित करना चाहिए। उदा .:

my_project/.Rlibs/* 
+0

आर पैकेज 'ProjectTemplate' और' devtools' देखें। – Ramnath

+0

ProjectTemplate इसका समर्थन नहीं करता है। दस्तावेज़ों का कहना है कि पुस्तकालयों को पहले से ही स्थापित किया जाना चाहिए: "पुस्तकालय: यह उन सभी आर संकुलों की अल्पविराम से अलग सूची है जिसे उपयोगकर्ता लोड लोड करने के दौरान स्वचालित रूप से लोड करना चाहता है।) ये संकुल पहले से ही स्थापित होना चाहिए load.project() को कॉल करना। डिफ़ॉल्ट रूप से, reshape, plyr, ggplot2, stringr और lubridate संकुल इस सूची में शामिल हैं। " – yoni

+1

devtools की तरह कुछ शानदार चीजें दिखती हैं, लेकिन यह भी कम हो जाती है। – yoni

उत्तर

5

स्टॉप-गैप के रूप में, मैंने एक नया rbundler पैकेज लिखा है। यह परियोजना निर्भरताओं को एक परियोजना-विशिष्ट उपनिर्देशिका (उदा। <PROJECT>/.Rbundle) में स्थापित करता है, जिससे उपयोगकर्ता वैश्विक पुस्तकालयों का उपयोग करने से बचने की अनुमति देता है।

अब हम कुछ महीनों के लिए Opower पर rbundler उपयोग कर रहे हैं और डेवलपर कार्यप्रवाह, testability में एक विशाल सुधार देखा है, और आंतरिक का रख-रखाव संकुल। हमारे आंतरिक पैकेज भंडार के साथ, हम उत्पादन अनुप्रयोगों में उपयोग के लिए एक दर्जन या तो पैकेज के विकास को स्थिर करने में सक्षम हैं।

एक आम कार्यप्रवाह: GitHub से एक परियोजना

  • चेक बाहर
  • परियोजना निर्देशिका
  • आग अप आर
  • आर कंसोल से में

  • सीडी:

    पुस्तकालय (rbundler)

    बंडल ('।')

सभी निर्भरता ./.Rbundle में स्थापित किया जाएगा, और एक .Renviron फ़ाइल बनाया जाएगा निम्नलिखित सामग्री के साथ:

R_LIBS_USER='.Rbundle' 

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

+1

पहली नजर में मुझे ऐसा लगता है कि यह वास्तव में पैकरैट (http://rstudio.github.io)/packrat /) करता है, जिसे हाल ही में आरस्टूडियो टीम द्वारा प्रकाशित किया गया है। क्या मैं गलत हूं? – jhin

+3

इसे लाने के लिए धन्यवाद, @ जेन।जब मैंने 'rbundler' विकसित करना शुरू किया, तब मैंने इस बारे में @ हडली और आरस्टूडियो में लोगों के साथ बात की। अंतर यह है कि 'rbundler' _package_ विकास पर केंद्रित है, और आपकी' विवरण 'फ़ाइल में स्पष्ट निर्भरताओं का लाभ उठाता है, जबकि' पैकरैट 'सामान्य परियोजना विकास पर केंद्रित है, और आपकी निर्भरता प्रतिबिंब के माध्यम से प्राप्त होती है। तैनाती और साझा करने की सुविधा के लिए, पैकरैट में आपकी निर्भरताओं को स्नैपशॉट करने के लिए कुछ अतिरिक्त सुविधाएं हैं। मेरा मानना ​​है कि मेजबान परियोजनाओं के प्रबंधन के समाधान के रूप में उनकी सर्वोच्च प्राथमिकता थी। – yoni

+0

आह, मैं देखता हूं। मैं सिर्फ rbundler के साथ पैकेज परिनियोजन वर्कफ़्लो को समझने की कोशिश कर रहा था, लेकिन मुझे पूरा यकीन नहीं है कि मुझे यह सही लगता है। आइए मान लें कि मैंने एक पैकेज विकसित किया है, और मैं अपनी निर्भरताओं को rbundler के साथ बंडल करता हूं। क्या होता है जब कोई मेरा पैकेज इंस्टॉल करता है, उदा। एक मिनीक्रैन से devtools 'install ("mypack")' का उपयोग करके (मान लीजिए कि "हमारा आंतरिक पैकेज भंडार" से आपका क्या मतलब है)? पैकेज निर्भरताओं का समाधान कैसे किया जाता है? – jhin

1

आप निम्न कार्यप्रवाह इस्तेमाल कर सकते हैं:

1) एक स्क्रिप्ट फ़ाइल बनाने, जो सब कुछ आप सेटअप करना चाहते हैं और अपने projectd निर्देशिका में संग्रहीत के रूप में जैसे projectInit.R

2) एक कोशिश बयान

try(source("./projectInit.R"), silent=TRUE) 

यह गारंटी है कि जब भी कोई projectInit.R पाया जाता है के साथ स्रोत अपने .Rprofile से इस स्क्रिप्ट (या किसी अन्य फ़ाइल स्टार्टअप पर आर द्वारा निष्पादित) , आर त्रुटि संदेश के बिना शुरू होता है

3) यदि आप अपने प्रोजेक्ट निर्देशिका में आर शुरू, projectInit.R फ़ाइल निर्देशिका में मौजूद है, तो sourced किया जाएगा और आप जाना

यह एक लिनक्स के नजरिए से है के लिए तैयार हैं , लेकिन उसी तरह से काम करना चाहिए unde आर विंडोज और मैक भी।

+0

क्षमा करें - मैंने "इंस्टॉल" भाग नहीं देखा है। मुझे यहां डिर्क के साथ जाना है - इसे एक मंच के लिए विशिष्ट होना होगा, लेकिन वहां कुछ उदाहरण आते हैं। एक बैश स्क्रिप्ट आसान है, जो संभवतः आप चाहते हैं कि प्राप्त कर सकते हैं (ऊपर उल्लिखित ProjectInit.R फ़ाइल के सोर्सिंग के साथ संगीत में। – Rainer

6

दुर्भाग्य से, Depends:DESCRIPTION: फ़ाइल के भीतर सभी है आपको निम्न कारणों से मिलती है:

  • आर ही यथोचित पार मंच है, लेकिन है कि हम इस जरूरत प्लेटफार्मों पर काम करने के लिए है और इसका मतलब OS के
  • एन्कोडिंग निर्भर करता है: आर पैकेजों से परे एन्कोडिंग को पोर्टेबल तरीके से ऑपरेटिंग सिस्टम में निर्भर करता है --- अच्छी किस्मत एन्कोडिंग 'पीएनजी ग्राफिक्स लाइब्रेरी' जैसी कुछ सरल चीजें जो कि सिस्टम पर अनजाने में हल की जा सकती हैं
  • विंडोज एक पैकेज प्रबंधक
  • AFAIK ओएस एक्स एक पैकेज प्रबंधक घुलमिल कि क्या एप्पल जहाजों और क्या अन्य मुक्त स्रोत परियोजनाओं
  • प्रदान भी लिनक्स वितरण के बीच नहीं है नहीं है, आप स्थिरता नहीं मिलता है: बस के रूप में RStudio ले एक उदाहरण जो दो पैकेजों में आता है (जो सभी अपनी निर्भरता प्रदान करते हैं!) रेडहाट/फेडोरा और डेबियन/उबंटू

यह एक कठिन समस्या है।

+3

किसी को भी टिप्पणी छोड़ दिए बिना इसे कम करने का सौजन्य: * आप इसे गलत कर रहे हैं * केवल टिप्पणियों के साथ ही हम एक चर्चा कर सकते हैं जो हर कोई सीख सकता है। यादृच्छिक ड्राइव-बाय-डाउनवॉट्स किसी की भी मदद नहीं करते हैं। –