आर के एक नए संस्करण को स्थापित करने का दर्द रहित तरीका?


158

एंड्रयू जेलमैन ने हाल ही में आर (शायद लिनक्स की तुलना में विंडोज पर अधिक प्रासंगिक है) के लिए एक आसान उन्नयन प्रक्रिया की कमी पर जोर दिया । क्या किसी के पास अपग्रेड करने से लेकर सॉफ्टवेयर इंस्टाल करने से लेकर सभी सेटिंग्स / पैकेज को कॉपी करने की अच्छी ट्रिक है?

यह सुझाव टिप्पणियों में सम्‍मिलित था और हाल ही में मैं इसका उपयोग कर रहा हूं। पहले आप नया संस्करण स्थापित करें, फिर इसे पुराने वर्जन में चलाएँ:

#--run in the old version of R
setwd("C:/Temp/")
packages <- installed.packages()[,"Package"]
save(packages, file="Rpackages")

नए संस्करण में इसके द्वारा अनुसरण किया गया:

#--run in the new version
setwd("C:/Temp/")
load("Rpackages")
for (p in setdiff(packages, installed.packages()[,"Package"]))
install.packages(p)

1
अप-टू-डेट समाधान का उपयोग कैसे किया जाता है?
मेजर

मैंने हाल ही में इसका इस्तेमाल किया और बेहतरीन काम किया।
लिटवॉस

जवाबों:


74

पूर्णता के लिए, इस समस्या को होने से रोकने के लिए कुछ तरीके हैं। जैसा कि डिर्क ने कहा, अपने पैकेज को अपने कंप्यूटर पर किसी अन्य निर्देशिका में सहेजें।

install.packages("thepackage",lib="/path/to/directory/with/libraries")

आप .Libraryफ़ंक्शन का उपयोग करके डिफ़ॉल्ट मान .libPathsभी बदल सकते हैं

.libPaths("/path/to/directory/with/libraries")

यह इस पथ को .Libraryचर में पहले मूल्य के रूप में रखेगा, और इसे डिफ़ॉल्ट बना देगा।

यदि आप इसे और स्वचालित करना चाहते हैं, तो आप इसे Rprofile.site फ़ाइल में निर्दिष्ट कर सकते हैं, जो आपको अपने R बिल्ड के / etc / directory में मिलती है। फिर यह हर बार आर लोड होने पर स्वचालित रूप से लोड होगा, और आपको इसके बारे में कोई चिंता करने की ज़रूरत नहीं है। आप बस निर्दिष्ट निर्देशिका से पैकेज स्थापित और लोड कर सकते हैं।

अंत में, मेरे कुछ छोटे कोड मेरे Rprofile.site में शामिल हैं, जब मैं एक नया R संस्करण स्थापित करने पर मुझे सभी पैकेजों को पुनर्स्थापित करने की अनुमति देता हूं। नए R संस्करण में अपडेट करने से पहले आपको उन्हें सूचीबद्ध करना होगा । मैं एक .RData फ़ाइल का उपयोग करके सभी संकुल के साथ एक अद्यतन सूची रखता हूँ।

library(utils)

## Check necessary packages
load("G:\Setinfo\R\packagelist.RData") # includes a vector "pkgs"
installed <- pkgs %in% installed.packages()[, 'Package']
if (length(pkgs[!installed]) >=1){
  install.packages(pkgs[!installed])
}

मैं .Last()अपने Rprofile.site में निर्दिष्ट करके packagelist.RData बनाता हूं। यदि मैंने कुछ स्थापित किया है तो यह पैकेज सूची को अद्यतन करता है:

.Last <- function(){
  pkgs <- installed.packages()[,1]
  if (length(pkgs) > length(installed)){
    save(pkgs,file="G:\Setinfo\R\packagelist.RData")
  }
}

जब मैं एक नया R संस्करण स्थापित करता हूं, तो मैं Rprofile.site फ़ाइल में आवश्यक तत्वों को जोड़ता हूं और सभी पैकेजों को पुनर्स्थापित किया जाता है। मुझे वैसे भी Rprofile.site को समायोजित करना है (सम विषम का उपयोग करके, Tinn-R, इन चीजों के लिए अतिरिक्त कोड जोड़ना), इसलिए यह वास्तव में अतिरिक्त काम नहीं है। यह सभी पैकेजों को नए सिरे से स्थापित करने में अतिरिक्त समय लेता है।

मूल प्रश्न में हल के रूप में जो दिया गया है उसके बराबर यह अंतिम बिट है। मुझे पहले "इंस्टॉल" सूची प्राप्त करने के बारे में चिंता करने की आवश्यकता नहीं है।

यदि आपके पास CRAN से स्थापित नहीं हैं, तो फिर से, यह निर्दोष काम नहीं करता है। लेकिन यह कोड उन लोगों को भी शामिल करने के लिए आसानी से विस्तार योग्य है।


2
@ प्रसाद: Thx। जवाब थोड़ा पुराना है, हालांकि, आर 2.12 और आगे स्वचालित रूप से उन पैकेजों को सहेजते हैं जो आप मुख्य आर पेड़ के बाहर एक मानक पुस्तकालय में कहीं स्थापित करते हैं। तो आपको बस इतना करना होगा कि आप यह सुनिश्चित करें कि आपको वह लाइब्रेरी मिल जाए और उससे लिंक हो जाए, अगर ऐसा नहीं हुआ।
जोरिस मेय्स

@ ४२: that ९ ०: मैं उस पुस्तकालय को कहां खोज सकता हूं जिसका आप उल्लेख करते हैं?
डैनियल क्रिज़ियन

@DanielKrizian आंतरिक ऑब्जेक्ट में डिफ़ॉल्ट पर देखें .Library। मेरे मामले में, यह आर इंस्टॉलेशन फ़ोल्डर में वापस आ जाता है यदि अपरिवर्तित (जो मुझे विशेष रूप से नापसंद है, लेकिन)
जोरिस मेय्स

42

यह निश्चित रूप से एक पुराना सवाल है, लेकिन एक नया आसान उत्तर (केवल विंडोज के लिए काम करना) हो सकता है, जो मुझे अभी मिला है।

install.packages("installr")
require(installr)
updateR()

ऐसा करने का सबसे अच्छा तरीका RGui प्रणाली से है। आपके सभी पैकेज नए फ़ोल्डर में स्थानांतरित हो जाएंगे और पुराने हटा दिए जाएंगे या सहेजे जाएंगे (आप या तो चुन सकते हैं)। फिर एक बार जब आप RStudio को फिर से खोलते हैं, तो यह तुरंत पहचान लेता है कि आप एक अद्यतन संस्करण का उपयोग कर रहे हैं। मेरे लिए यह एक आकर्षण की तरह काम करता है,

अधिक जानकारी यहाँ {installr} पर

साइमन


2
गीथूब के माध्यम से स्थापित पैकेजों के बारे में क्या?
स्केन

8
यह उल्लेख किया जाना चाहिए कि यह विंडोज के लिए है।
बेरो

27

दो त्वरित सुझाव:

  1. कहा जाता है कि इस थोक पुस्तकालय स्थानांतरण के साथ मदद करने वाले उपकरण शामिल करने के लिए कहा जाता है जो गेबर के बैचफाइल्स का उपयोग करें । कैविएट: मैंने उनका उपयोग नहीं किया है।

  2. स्थापित आर संस्करण के 'फाइलेट्री' के भीतर पुस्तकालयों को स्थापित न करें। विंडोज पर, मैं R को C: / ऑप्ट / R / R- $ संस्करण में रख सकता हूं, लेकिन सभी लाइब्रेरी को C: / ऑप्ट / R / लाइब्रेरी में रख सकता हूं या निम्न स्निपेट का उपयोग कर सकता हूं क्योंकि यह पहली जगह में समस्या को कम करता है:

$ cat .Renviron         # this is using MSys/MinGW which looks like Cygwin  
## Example .Renviron on Windows    
R_LIBS="C:/opt/R/library"

मुझे आश्चर्य है कि अगर, R 2.8 से R.9 तक पैकेज स्थानांतरित करने से कोई समस्या होती है? या जब तक आप नए संस्करण में एक update.packages करते हैं तब तक सब कुछ ठीक रहेगा?
एडुआर्डो लियोनी

मैं काफी समय से ऐसा कर रहा हूं और मुझे कोई समस्या नहीं हुई है। R आमतौर पर "आगे संगत" है। और IIRC केवल एक उन्नयन (हो सकता है आर 1.9 -> आर 2.0) सभी पुस्तकालयों के पुनर्निर्माण की आवश्यकता है।
डिर्क एडल्डबुलेटेल

5
मैं भी आमतौर पर सिर्फ अपने लाइब्रेरी फ़ोल्डर को अपने नए इंस्टॉलेशन और कॉपी अपडेट के लिए चलाता हूं। यह काम तो ठीक करता है। एक वैकल्पिक स्थापित फ़ोल्डर हालांकि बहुत अधिक सुरुचिपूर्ण है।
kpierce8

बस इंगित करने के लिए - मैंने आर कोड के साथ एक उत्तर जोड़ा है, जो डिर्क के सुझाव (आर विंडोज़ उपयोगकर्ताओं के लिए) का प्रदर्शन कर रहा है
ताल गैली

26

यदि आपके पास ऐसे पैकेज हैं जो CRAN से नहीं हैं, तो ऊपर दी गई विधि पूरी तरह से काम नहीं करेगी। उदाहरण के लिए, एक व्यक्तिगत पैकेज या एक गैर-सीआरएएन साइट से डाउनलोड किया गया पैकेज।

विंडोज पर मेरी पसंदीदा विधि (2.10.1 से 2.11.0 तक उन्नयन):

  1. R-2.11.0 स्थापित करें
  2. को कॉपी R-2.10.0/library/*करेंR-2.11.0/library/
  3. उत्तर "नहीं" आपको पूछने के लिए संकेत देता है कि क्या यह ओवरराइट करने के लिए ठीक है।
  4. आर 2.11.0 प्रारंभ करें
  5. R कमांड चलाएं update.packages()

7

प्रश्न में दिए गए समाधान के संबंध में, यदि आप पहले से ही नया संस्करण स्थापित कर चुके हैं तो अपने पुराने संस्करण को चलाना आसान नहीं होगा। इस स्थिति में, आप अभी भी पिछले R संस्करण से सभी अनुपलब्ध पैकेजों को पुन: स्थापित कर सकते हैं।

# Get names of packages in previous R version
old.packages <- list.files("/Library/Frameworks/R.framework/Versions/3.2/Resources/library")

# Install packages in the previous version. 

# For each package p in previous version...
    for (p in old.packages) {
      # ... Only if p is not already installed
      if (!(p %in% installed.packages()[,"Package"])) {
        # Install p 
        install.packages(p) 
      }
    }

(ध्यान दें कि list.files()कोड की पहली पंक्ति में तर्क आपके पिछले आर संस्करण के लिए पुस्तकालय निर्देशिका का मार्ग होना चाहिए, जहां पिछले संस्करण में पैकेज के सभी फ़ोल्डर हैं। मेरे वर्तमान मामले में, यह है "/Library/Frameworks/R.framework/Versions/3.2/Resources/library"। यह अलग होगा अगर आपका पिछला R संस्करण 3.2 नहीं है, या यदि आप विंडोज पर हैं।)

यह ifकथन सुनिश्चित करता है कि पैकेज स्थापित नहीं है या नहीं

  • यह पहले से ही नए आर संस्करण में स्थापित है, या
  • forलूप के पिछले पुनरावृत्ति में स्थापित पैकेज से निर्भरता के रूप में स्थापित किया गया है ।

इससे मेरी समस्या हल हो गई, धन्यवाद! यह सवाल थोड़ा गूंगा लग सकता है, लेकिन क्या मैं पुराने पुस्तकालयों को हटा सकता हूं?
m_c

4

डिर्क के सुझाव के बाद, विंडोज़ पर इसे करने के लिए कुछ आर कोड है: विंडोज़ एक्सपी पर आर को आसानी से अपग्रेड कैसे करें

अद्यतन (15.04.11): मैंने इस विषय पर एक और पोस्ट लिखी, जिसमें बताया गया कि विंडोज़ 7 पर आर को अपग्रेड करने के सामान्य मुद्दों से कैसे निपटा जाए


2
आर के सबसे हाल के संस्करणों के लिए, ताल के पास एक पैकेज है, installrजो इस प्रक्रिया को स्वचालित करता है (वर्तमान में केवल विंडोज़ पर) r-statistics.com/tag/installr या github.com/talgalili/installr
लुई मैडॉक्स

1
C: \ Program Files \ R \ R-3.6.0 \ bin \ i386 से Rgui.exe चलाएँ और कंसोल को कोड लिखें install.packages(installr); library(installr); updateR(TRUE):। अंत में, [1] TRUEप्रकट होता है। गैलिली के उत्कृष्ट पैकेज से, मैं आर 3.6.0 से आर 3.6.1 तक बहुत ही सहजता से गया। धन्यवाद ताल।
एर्दोगन CEVHER

2

दो विकल्प:

  1. मेरे उत्तर को यहाँ लागू करें
  2. यदि आप स्टेट के साथ ग्रहण के तहत आर का उपयोग करते हैं, तो रन कॉन्फ़िगरेशन खोलें , कंसोल टैब पर क्लिक करें और स्टार्टअप के बाद आर स्निपेट नामक बॉक्स में अपनी पसंद की निर्देशिका के साथ इस लाइन को जोड़ें:.libPaths("C:/R/library")

1

मैं विंडोज 8 पर हूं और कुछ अजीब कारणों से, मैं अपने इंटरनेट कनेक्शन का उपयोग करके कभी भी पैकेज स्थापित नहीं कर सकता।

मैं आम तौर पर इसे सीआरएएन से .zip फ़ाइल का उपयोग करके स्थापित करता हूं।

मैं आर 3.2.5 से आर 3.3.1 तक जाने के बाद।

मैंने बस संकुल को कॉपी किया है

C:\Path\to\packa\R\win-library\3.2को C:\Path\to\packa\R\win-library\3.3

और फिर मैंने आर सत्र को फिर से शुरू किया। पूरी तरह से काम किया। यदि सभी पैकेज अच्छी तरह से काम कर रहे हैं तो मैंने जाँच नहीं की है। लेकिन, जिन लोगों की मैंने जाँच की वे पूरी तरह से काम कर रहे हैं। आशा है कि यह हैक सभी के लिए काम करे।

चीयर्स।


1

यदि आपके पास दूरदर्शिता है, तो स्वीकृत उत्तर काम कर सकता है, लेकिन मैंने पहले ही पुराने संस्करण से छुटकारा पा लिया था इसलिए इन निर्देशों का पालन करने में सक्षम नहीं था। नीचे वर्णित चरणों ने ओएसएक्स के उन्नयन के लिए 2.1 और 3.1 से काम किया।

अद्यतन: अपने सबसे हाल के संस्करण (3.1 या 3.2 में टाइप करने के बजाय) के लिए निर्देशिका प्राप्त करने के लिए आप नीचे दिए गए आदेशों का उपयोग कर सकते हैं। दूसरा एक आर-चर, लंघन करने के लिए सीधे धर्मान्तरित .और ..और .DS_Store, उपयोग करें:

OLD=$(ls -d /Library/Frameworks/R.framework/Versions/*.* |tail -n 2 | head -n 1)Resources/library/
echo "packages = c(\"`ls $OLD | tail +4| paste -s -d ',' - | sed -E 's|,|\",\"|'g`\")" | tr -d "/" 

( |pbcopyइसे सीधे अपने मैक क्लिपबोर्ड पर कॉपी करने के लिए जोड़ें )

फिर R के भीतर आप उस चर को उत्पन्न कर सकते हैं जो उत्पन्न होता है। एक बार जब आर के नए संस्करण में परिभाषित किया गया है, तो आप ऊपर दिए गए निर्देशों से स्थापित पैकेज के माध्यम से लूप कर सकते हैं ...

for (p in setdiff(packages, installed.packages()[,"Package"]))
   install.packages(p, dependencies=TRUE, quiet=TRUE, ask=FALSE)

0

मेरे लिए यह पृष्ठ अच्छा है https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-use-the-installr-package/ या कोई अन्य विकल्प बस नया स्थापित करें विकल्प और अंतिम रूप में आप उदाहरण के लिए, मेरे पीसी में विंडोज़ में

.libPaths (c ("D: /Documents/R/win-library/3.2", "C: / Program Files / R / R-3.2.3 / पुस्तकालय", "C: / Program Files / R / R-3.2) .0 / लाइब्रेरी "," D: /Documents/R/win-library/2.15 "

मेरे मामले में अंतिम संस्करण के हर पथ पर मैंने हमेशा पहला रास्ता रखा है "D: /Documents/R/win-library/3.2" जो कि ठीक किया गया है और फिर मैंने दूसरा डाला क्योंकि आपको किसी पैकेज की प्रतिलिपि बनाने या स्थानांतरित करने की आवश्यकता नहीं है, में मेरी सबसे बड़ी बस इसे बुलाओ


0

linux+ bash+ debian+ aptउपयोगकर्ता:

  1. यदि आप नवीनतम संस्करण में स्थापित / अपग्रेड कर रहे हैं R, तो हम मान सकते हैं कि आपके पास हैroot अनुमतियां हैं। (आवश्यक नहीं, बस प्रक्रिया को बहुत सरल बना देता है; स्थिरता के लिए नीचे दी गई स्क्रिप्ट सभी इंस्टाल के sudoलिए उपयोग होती है ।) जैसा कि पैकेजों द्वारा भी स्थापित किया गया है , इस प्रकार इनको इसमें लगाने की अनुमति है ।Rroot/usr/local/

  2. के लिए कॉल curl आप पहले से ही कर रहे हैं में रुचि हो जाती है नीचे sidकी रिहाई R, बहुत नवीनतम अस्थिर (/ एक जाँच जब निर्माण के रूप में आवश्यक संस्करण Rपैकेज) यानी

    cat /etc/apt/sources.list | grep 'sid' || exit 1

    हालांकि यह आसानी से हाल ही में स्थिर रिलीज जैसे उदाहरण के साथ बदला जा सकता है buster

  3. ध्यान दें कि मैं एक कुंजी का उपयोग नहीं कर रहा हूं जैसा कि आमतौर पर सिफारिश की जाती है । यह आवश्यक नहीं है, खासकर यदि (स्क्रिप्ट में जो निम्न प्रकार है) हम भीतर पैकेज स्थापित करते हैं R अपने ( Rscript -eनीचे) । इसके अलावा, ऐसी चाबियों को हर कुछ वर्षों में तोड़ने / बदलने की प्रवृत्ति होती है। इस प्रकार, आप निश्चित रूप से फाइल में निम्नलिखित प्रस्तावना जोड़ने के लिए स्वागत करते हैं R.shजो निम्नानुसार है:

    sudo apt-key adv --keyserver keyserver.ubuntu.com \ --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

  4. arrayके Rसंकुल स्पष्ट रूप से संपूर्ण नहीं है लेकिन कुछ उदाहरण जो मैं व्यक्तिगत रूप से उपयोगी पाते हैं देता है। debianपैकेज के साथ एक ताजा स्थापित / उन्नयनr-recommended , नीचे के रूप में, मानक 'अनुशंसित' पैकेजों (जैसे survival) के सभी का नवीनतम संस्करण देना चाहिए । मेरा मानना ​​है कि सीआरएएन रिलीज और संबंधित debianपैकेज के अपडेट के बीच थोड़ा सा अंतराल हो सकता है । इस प्रकार, यदि आप array'अनुशंसित' Rपैकेज का नवीनतम संस्करण आवश्यक है , तो आप इनमें से कुछ को नीचे जोड़ना चाह सकते हैं ।

  5. debianसंकुल नीचे प्रक्रिया में स्थापित भी न आवश्यक (प्रयोग करने के लिए कर रहे हैं r-base) और न ही संपूर्ण लेकिन एक नहीं प्रदान करते हैं। 'ऐड-ऑन' जो उचित संख्या के लिए महत्वपूर्ण हैं। के Rसंकुल।

वैसे भी ... निम्नलिखित में जगह R.sh:

sudo apt update && sudo apt --yes full-upgrade
sudo apt install --yes libappstream4 curl
### ov1 = online version; lv1 = local version (i.e. currently installed)
ov1=$(curl --silent --url https://packages.debian.org/sid/r-base |
    grep 'meta name=\"Keywords\"' |
    grep --only-matching '[0-9].*[0-9]') ; echo $ov1
## command -v = print a description of COMMAND similar to the `type' builtin
## && = if prior command succeeds, then do; || = if prior fails, then do
command -v 'R --version' &&
    lv1=$(R --version |
              grep --only-matching '[0-9\.]*[0-9]' |
              ## || = otherwise
              head -1) ||
        lv1=0
## 'lt' = less than
if dpkg --compare-versions "$lv1" 'lt' "$ov1" 
then ## declare -a = indexed array
     declare -a deb1=('r-base' 'r-base-dev' 'r-recommended')
     for i in "${deb1[@]}"
     do sudo apt install --yes "$i"
     done
fi
### certain Debian packages are required by 'R' so best have these first
sudo apt install --yes ccache libcairo2-dev libxml2-dev libcurl4-openssl-dev \
     libssl-dev liblapack-dev libssl-dev
declare -a pkg1=('data.table' 'ggplot2' 'knitr' 'devtools' 'roxygen2')
## installing as 'root' so these are installed in
Rscript -e ".libPaths()[1]"
for i in "${pkg1[@]}"
do sudo Rscript -e "install.packages('$i', dependencies=TRUE)"
done
### other useful additions
sudo apt install --yes libblas-dev libboost-dev libarmadillo-dev \
     jags pandoc pandoc-citeproc 
sudo apt update && sudo apt full-upgrade

फिर इसे निष्पादित करें, उदाहरण के लिए पहले से ही निर्देशिका में ग्रहण करना source R.sh

शेल से लूप में एक -एक करके पैकेज (चाहे debianया R) स्थापित करना कुछ हद तक अक्षम है, लेकिन त्रुटियों के सरल ट्रेसिंग के लिए अनुमति देता है, आईएमएचओ। नहीं के आधार पर कुछ समय ले सकते हैं। के संकुल, इसलिए शायद सबसे सरल रात भर चलने देने के लिए ...R


1
निश्चित नहीं है कि पूरक पैकेजों की सूची में 'अस्तित्व' क्यों है। (और यह काफी संभव है कि मैं इस बैश स्क्रिप्ट को गुमराह कर रहा हूं।) यह "अनुशंसित" पैकेज रहा है ... हमेशा के लिए। यदि आप उस स्क्रिप्ट के साथ सभी अनुशंसित पैकेज स्थापित नहीं कर रहे हैं, तो ऐसा करने के लिए इसे संशोधित किया जाना चाहिए। यह भी सोचें कि linux का उपयोग करने वाले किसी के लिए संकुल के r-base-devel सेट की आवश्यकता होगी। और माइकल रटर का पीपीए क्यों नहीं जोड़ा गया?
IRTFM

धन्यवाद! आपकी सहायक टिप्पणियों के प्रकाश में अपडेट किया गया। सहमत, पहले से मौजूद पैकेज को स्थापित करने के लिए नियमित रूप से कोई ज़रूरत नहीं है r-recommended। 'आर-बेस-डेवेल' r-base-dev( debianपैकेज) के रूप में जाना जाता है - पहले से ही शामिल था। मैं सुरक्षा के लिए एक कुंजी का उपयोग करने के लिए प्रतिकूल नहीं हूं (उत्तर अद्यतन)। उत्तर PPA= व्यक्तिगत पैकेज अभिलेखागार का उपयोग करने से दूर रहता है क्योंकि ये एक व्यक्ति पर निर्भरता और इस प्रकार संभावित रूप से पतनशील हैं। जैसा कि माइकल रटर खुद कहते हैं (2012): "यदि आप सीआरएएन का उपयोग कर रहे हैं, तो पीपीए में बदलने का कोई कारण नहीं है, क्योंकि दोनों स्थानों पर समान पैकेज प्रदान किए जाते हैं।"
डार्डीस्को
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.