2011-08-20 12 views
24

मैं कई आर पुस्तकालयों (*) को एक ड्राइव से दूसरे ड्राइव पर ले जाना चाहता हूं, लिनक्स पर, और जानना चाहूंगा कि एक आसान कदम व्यवहार्य और सुरक्षित है या यदि मुझे पैकेजों को अनइंस्टॉल और पुनर्स्थापित करना चाहिए। मुझे एहसास है कि पुस्तकालयों के स्थानों की पहचान .libPaths() के माध्यम से की जाती है और पुस्तकालयों को माइग्रेट करने के बारे में जानने के लिए "आर स्थापना और प्रशासन" मैनुअल के माध्यम से देखा गया है, लेकिन एक अनुशंसित प्रक्रिया नहीं देखते हैं।माइग्रेटिंग आर लाइब्रेरी

मैं तीन विकल्प मानता: गैर आधार संकुल के सभी के लिए

  1. भागो remove.packages(), और install.packages(lib = "/path/to/new/location") के माध्यम से नए सिरे से स्थापित करें।
  2. पुस्तकालयों (निर्देशिका) mv का उपयोग कर ले जाएँ और नए स्थानों को इंगित करने के सिमलिंक का उपयोग
  3. उपयोग लिनक्स में mv आदेश निर्देशिका थोक ले जाएँ और के रूप में में सुझाव दिया R_HOME/etc/Rprofile.site में .Library.site अद्यतन करते हैं, करने के लिए (और अंत में सिमलिंक निकालने के लिए) R Installation and Administration manual

विकल्प # 1 धुंधला है। विकल्प # 2 काम करना चाहिए, लेकिन थोड़ा अस्वस्थ लगता है।

# 3 सुरक्षित है या इसके साथ गंभीर समस्याएं हैं? जिन मुद्दों को मैंने पहचाना है वे हैं: निर्देशिका अनुमतियां और संभावना है कि किसी भी पैकेज का सेटअप सापेक्ष पथ (जो अवांछित और अनावश्यक लगता है) के बजाय पूर्ण पथ संग्रहीत करता है।

पूर्ण पथों के भंडारण के संबंध में, मैंने पाया कि rJavarun नामक फ़ाइल में R_HOME का स्थान संग्रहीत करता है। यह लाइब्रेरी समस्या प्रति से नहीं है, लेकिन यह एक पूर्ण पथ की एक निजी प्रति को रखते हुए पैकेज (और उस पर एक अच्छा पैकेज) का एक संकेत है।

(*) कई पुस्तकालय और कई सारे पैकेज हैं। स्वाभाविक रूप से, केवल पुस्तकालय (निर्देशिका) स्थानांतरित हो जाते हैं, लेकिन संकुल प्रभावित हो सकते हैं।


अद्यतन 1/स्पष्टीकरण: बस स्पष्ट करने के लिए: मैं केवल पलायन पुस्तकालयों, आर के संस्करण या संकुल के संस्करणों नहीं बदल रहा हूँ। आर या संकुल को अद्यतन करना अलग से किया जा सकता है, लेकिन सवाल यह है कि पुस्तकालयों को स्थानांतरित करना या नहीं करना संभव है। ऐसा लगता है कि यदि यह सुनिश्चित करने के लिए कि चीजें सही तरीके से इंस्टॉल की गई हैं, तो सभी संकुल को अद्यतन या पुनर्स्थापित करना आवश्यक है, तो यह विकल्प # 3 के विकल्प # 1 के समान पथ है।

अद्यतन 2: another SO post के उत्तर में अपग्रेड करते समय इस समस्या से बचने के बारे में कुछ अच्छे विचार हैं। मैं आर को अपग्रेड नहीं कर रहा हूं, लेकिन आर के फाइलट्री में पैकेज इंस्टॉल नहीं करने के डिर्क एडडेलबुटेल के सुझाव बुद्धिमान हैं।

+1

सुनिश्चित नहीं है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं लेकिन आप [यह] (http://stackoverflow.com/questions/5721942/making-r-installation-self-contained-user-independent/6709445 पर देखना चाहेंगे # 670 9 445) प्रश्न और उससे संबंधित। लाइब्रेरी और पैकेज के बीच अंतर जानने के लिए – Fred

+0

+1 :-) –

+0

@ gsk3: मुझे उम्मीद है कि मैंने उस प्रकार की सभी संभावित त्रुटियों को ठीक किया है। मैं इस तरह के शब्दावली मुद्दे के लिए क्रूरता प्राप्त नहीं करना चाहता हूं। :) – Iterator

उत्तर

23

विकल्प # 3 (नए पुस्तकालय के लिए पुराने पुस्तकालय को कॉपी) काम करना चाहिए ... लेकिन यदि और केवल यदि आप तो चलाएँ:

update.packages(checkBuilt=TRUE) 

इस तरीके में संकुल नए संस्करणों के लिए पुनर्निर्माण की आवश्यकता है कि होगा अपडेट हो जाओ। यह अक्सर ऐसा होता है कि नए संस्करण आवश्यकताओं को जोड़ते हैं (जैसे कि NAMESPACE के लिए 2.14.x में आने वाली आवश्यकता)।

संपादित करें: यह देखकर सिर्फ डेक कुर्सियों के चारों ओर घूम रहा है .... यदि आप किसी भी मूल आर स्थापना को स्थानांतरित कर रहे हैं तो मैं # 3 का समर्थन करने से पीछे हट जाऊंगा।इसने मैक में मेरे लिए काम किया है, लेकिन मैंने आर इंस्टॉलेशन एंड एडमिनिस्ट्रेशन गाइड या आर एफएक्यू में कोई वादा नहीं देखा है कि काम करना चाहिए।

# In original installation, get the non-default package list: 
save.pkg.list <- installed.packages()[is.na(installed.packages()[ , "Priority"]), 1] 
save(save.pkg.list, file="pkglist.Rdata") 
# If you want to use remove.packages() at this point it's fine. 
# Or just delete their directories. 
.Libpaths अपनी प्राथमिकताएँ (या यहां तक ​​कि वही पुरानी स्थापना) के लिए सेट के साथ आर के एक ताजा स्थापित संस्करण के साथ

:: आप इस अनुक्रम द्वारा # 1 (जो शायद सबसे सुरक्षित विभिन्न स्थितियों में है) पूरा कर सकते हैं

load("pkglist.Rdata") 
install.packages(save.pkg.list) 

बस (यह मानते हुए आप भी .Libpaths बदल) एक नए पुस्तकालय अगर आर निष्पादनयोग्य सफल होने के हो सकता है नहीं बदला गया था करने के लिए संकुल चलती लेकिन मैं यह परीक्षण या पता है कि किसी भी संकेत दिए गए द्वारा स्थापित करने के लिए एक लिनक्स स्थापना की जरूरत नहीं है कॉन्फ़िगरेशन ऑपरेशन प्रभावित होंगे।

+0

धन्यवाद, यह दिलचस्प है। क्या आप 3 चीजों को स्पष्ट कर सकते हैं: (1) "नए संस्करणों के लिए पुनर्निर्मित करने की आवश्यकता" में संस्करणों का उल्लेख, यह आर को संदर्भित करता है, सही? (2) यदि (1) सही है, तो क्या होता है यदि पैकेज को पुनर्निर्मित करने की आवश्यकता नहीं है (यानी यह आर के वर्तमान संस्करण से पुराना है)? (3) जब आप कहते हैं कि अगर और केवल अगर, मैं यह समझता हूं कि यह एक आवश्यक और पर्याप्त शर्त है ... क्या आप वास्तव में इसका मतलब है? :) यदि ऐसा है, तो मुझे ऐसा क्यों याद आ रहा है कि ऐसा क्यों है। मैं असहमत नहीं हूं, लेकिन यह विकल्प मेरे लिए नया है और मुझे अभी तक तर्क समझ नहीं आया है। – Iterator

+0

(1) हाँ। आर 2.13.x से आर 2.14.x में परिवर्तन जहां x 0, 1 या 2 हो सकता है। जैसा कि मैं समझता हूं कि _might_ को कॉपी करने वाला सरल कार्य एक नए प्रमुख संस्करण के लिए एक कार्यात्मक पैकेज में है, उदाहरण के लिए 2.13 से 2.14 में परिवर्तन, लेकिन इसका कोई गारंटी नहीं होगी। तो मैं शायद बहुत स्पष्ट था। "काम करना चाहिए" का अर्थ है कि संस्करण पर पैकेज की निर्भरताओं पर एक जांच होगी और यदि आप update.packages नहीं करते हैं, तो कोई चेक नहीं चलाया जाएगा .. –

+0

हालांकि, अगर मैं केवल निर्देशिकाओं को स्थानांतरित कर रहा हूं * और आर * को अपग्रेड नहीं कर रहा है, तो क्या यह कोई अच्छा होगा? – Iterator