R'nin yeni bir sürümünü kurmanın acısız yolu?


158

Andrew Gelman kısa süre önce R için kolay bir yükseltme sürecinin eksikliğini yaktı (muhtemelen Windows'da Linux'tan daha alakalı). Yazılımı kurmaktan tüm ayarları / paketleri kopyalamaya kadar yükseltmeyi yapmak için iyi bir hile var mı?

Bu öneri yorumlarda yer aldı ve son zamanlarda kullandığım şey bu. Önce yeni sürümü yükledikten sonra eski sürümde çalıştırın:

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

Bunu yeni sürümde takip etti:

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

1
Burada kullanılan çözüm ne kadar güncel?
maj

Son zamanlarda kullandım ve harika çalışıyor.
Litwos

Yanıtlar:


74

Sadece bütünlük için, bu sorunu yaşamanızı önlemenin bazı yolları vardır. Dirk'in dediği gibi, paketlerinizi bilgisayarınızdaki başka bir dizine kaydedin.

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

Varsayılan değiştirebilir .Libraryişlevini kullanarak değeri .libPathsçok

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

Bu, bu yolu .Librarydeğişkente ilk değer olarak koyar ve varsayılan olarak yapar.

Bunu daha da otomatikleştirmek istiyorsanız, bunu R derlemenizin / etc / dizininde bulduğunuz Rprofile.site dosyasında belirtebilirsiniz. Daha sonra R her yüklendiğinde otomatik olarak yüklenir ve artık bunun için endişelenmenize gerek yoktur. Sadece belirtilen dizinden paketleri kurabilir ve yükleyebilirsiniz.

Son olarak, yeni bir R sürümü yüklediğimde tüm paketleri yeniden yüklememe izin veren Rprofile.site'de bazı küçük kodlar var. Yeni R sürümüne güncelleme yapmadan önce bunları listelemeniz yeterlidir. Tüm paketleri ile güncelleştirilmiş bir liste içeren bir .RData dosyası kullanarak bunu.

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()Benim Rprofile.site belirterek Packagelist.RData olun. Bazı yüklediysem bu paket listesini günceller:

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

Yeni bir R sürümü yüklediğimde, gerekli öğeleri yalnızca Rprofile.site dosyasına eklerim ve tüm paketler yeniden yüklenir. Zaten Rprofile.site ayarlamak zorunda (toplam zıtlıklar kullanarak, Tinn-R için ekstra kod ekleyerek, bu şeyler), bu yüzden gerçekten ekstra bir iş değil. Tüm paketlerin yeniden yüklenmesi ekstra zaman alır.

Bu son bit, orijinal soruda bir çözüm olarak verilene eşdeğerdir. Sadece "kurulu" listeyi almak konusunda endişelenmem gerekmiyor.

Yine, CRAN'dan kurulu olmayan paketleriniz varsa bu kusursuz çalışmaz. Ancak bu kod, bu kodları da içerecek şekilde kolayca genişletilebilir.


2
@Prasad: Teşekkürler. Cevap biraz modası geçmiş, R 2.12 ve kendinizi otomatik olarak ana R ağacının dışındaki standart bir kütüphanede bir yere kurduğunuz paketleri kaydediyor. Şimdi yapmanız gereken tek şey bu kütüphaneyi bulmak ve bu bağlantıyı kendi başınıza yapmamış olmanız.
Joris Meys

@ 428790: Bahsettiğiniz kütüphaneyi nerede bulabilirim?
Daniel Krizian

@DanielKrizian Dahili nesnede varsayılana bakın .Library. Benim durumumda, eğer değişmediyse R kurulum klasörüne işaret ediyor (ki özellikle sevmiyorum, ama iyi)
Joris Meys

42

Bu elbette eski bir soru ama yeni bulduğum yeni bir kolay yanıt (sadece Windows için çalışıyor) olabilir.

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

Bunu yapmanın en iyi yolu RGui sistemidir. Tüm paketleriniz yeni klasöre aktarılacak ve eskileri silinecek veya kaydedilecektir (bunlardan birini seçebilirsiniz). Daha sonra RStudio'yu tekrar açtığınızda, güncellenmiş bir sürüm kullandığınızı hemen tanır. Benim için bu bir cazibe gibi çalıştı,

{İnstallr} hakkında daha fazla bilgiyi burada bulabilirsiniz .

Simon


2
Github ile kurulan paketler ne olacak?
skan

8
Bunun Windows için olduğu belirtilmelidir.
beroe

27

İki hızlı öneri:

  1. Kullanım Gabor en batchfiles bu toplu kütüphane relocations örneğin ile yardımcı uzlaşmadır araçları söylenir. Dikkat: Onları ben kullanmadım.

  2. Kurulu R sürümünün 'dosya' içine kütüphaneler kurmayın. Windows'ta, R'yi C: / opt / R / R- $ sürümüne koyabilirim, ancak aşağıdaki kitaplığı kullanarak ilk kütüphaneyi C: / opt / R / library / içine yerleştirebilirim.

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

Merak ediyorum ki, R 2.8'den R.9'a paketleri aktarmak sorun yaratır mı? Yoksa bir güncelleme yaptığınız sürece her şey iyi olacak mı. Yeni sürümdeki paketler?
Eduardo Leoni

Bunu bir süredir yapıyorum ve problemim olmadı. R tipik olarak "ileri uyumludur". Ve IIRC sadece bir yükseltme (R 1.9 -> R 2.0 olabilir) tüm kütüphanelerin yeniden oluşturulmasını gerektirdi.
Dirk Eddelbuettel

5
Ayrıca genellikle Kütüphane klasörümü yeni yüklememe kopyalarım ve update.packages komutunu çalıştırırım. İyi çalışıyor gibi görünüyor. Ancak isteğe bağlı bir yükleme klasörü çok daha zariftir.
kpierce8

Sadece işaret etmek için - Dirk'ün önerisini yerine getiren R koduyla bir yanıt ekledim (R windows kullanıcıları için)
Tal Galili 15:11

26

CRAN'dan olmayan paketleriniz varsa, yukarıda önerilen yöntem tamamen çalışmaz. Örneğin, kişisel bir paket veya CRAN olmayan bir siteden indirilen bir paket.

Windows'ta tercih ettiğim yöntem (2.10.1 sürümüne 2.11.0 sürümüne yükseltme):

  1. R-2.11.0'ı yükleyin
  2. Şuraya kopyala R-2.10.0/library/*:R-2.11.0/library/
  3. Üzerine yazmanın uygun olup olmadığını soran bilgi istemlerine "hayır" yanıtını verin.
  4. Başlangıç ​​R 2.11.0
  5. R komutunu çalıştırın update.packages()

7

Soruda verilen çözümle ilgili olarak, yeni sürümü zaten yüklediyseniz, eski R sürümünüzü çalıştırmak kolay olmayabilir. Bu durumda, önceki R sürümündeki tüm eksik paketleri yine de aşağıdaki gibi yeniden yükleyebilirsiniz.

# 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()Kodun ilk satırındaki argümanın , önceki sürümünüzdeki tüm paket klasörlerinin bulunduğu önceki R sürümünüzün kütüphane dizinine giden yol olması gerektiğini unutmayın. Geçerli durumumda, bu "/Library/Frameworks/R.framework/Versions/3.2/Resources/library". önceki R sürümünüz 3.2 değil veya Windows kullanıyorsanız.)

ifİfadesi bir paket emin kılan değil eğer yüklü

  • Yeni R sürümünde zaten yüklü veya
  • forDöngünün önceki bir yinelemesinde kurulu bir pakete bağımlılık olarak kuruldu .

Bu sorunumu çözdü, teşekkürler! Bu soru biraz aptalca gelebilir, ancak eski kütüphaneleri silebilir miyim?
m_c

4

Dirk'ün önerisini takiben, pencerelerde bunu yapmak için bazı R kodu: Windows XP'de R nasıl kolayca yükseltilir

Güncelleme (15.04.11): Konuyla ilgili başka bir yazı yazdım , Windows 7'de R'yi yükseltmenin yaygın sorunlarıyla nasıl başa çıkılacağını açıkladım


2
R en son sürümleri için, Tal adında bir paket var installr(sadece Windows üzerinde şu anda) bu süreci otomatik hale r-statistics.com/tag/installr veya github.com/talgalili/installr
Louis Maddox

1
C Run Rgui.exe: \ Program Files \ R \ R-3.6.0 \ bin \ i386 ve konsola kod yazmak: install.packages(installr); library(installr); updateR(TRUE). Sonunda [1] TRUEgörünür. Galili'nin mükemmel paketi ile R 3.6.0'dan R 3.6.1'e çok kolay geçtim. Teşekkürler Tal.
Erdoğan CEVHER

2

İki seçenek:

  1. Cevabımı buraya uygula
  2. StatET ile Eclipse altında R kullanıyorsanız, Configurations'ı Çalıştır'ı açın , Console sekmesine tıklayın ve başlatmadan sonra R snippet run adlı kutuya bu satırı dizin seçiminize ekleyin:.libPaths("C:/R/library")

1

Windows 8'deyim ve garip bir nedenden dolayı, internet bağlantılarımı kullanarak asla paket yükleyemiyorum.

Genellikle CRAN'dan .zip dosyasını kullanarak yüklerim.

R 3.2.5'ten R 3.3.1'e gittim.

Paketleri kopyaladım

C:\Path\to\packa\R\win-library\3.2için C:\Path\to\packa\R\win-library\3.3.

Ve sonra R oturumunu yeniden başlattım. Mükemmel çalıştı. TÜM paketlerin iyi çalışıp çalışmadığını kontrol etmedim. Ama kontrol ettiklerim gayet iyi çalışıyor. Umarım bu kesmek herkes için çalışır.

Şerefe.


1

Öngörü varsa, kabul edilen cevap işe yarayabilir, ancak eski sürümden zaten kurtuldum, bu yüzden bu talimatları takip edemedim. Aşağıda açıklanan adımlar 2.1 ve 3.1'den OSX yükseltmesi için çalıştı.

GÜNCELLENDİ: En son sürümünüzün dizinini almak için (3.1 veya 3.2 yazmak yerine) aşağıdaki komutları kullanabilirsiniz. R değişkeni, atlama doğrudan ikinci dönüştürür .ve ..ve .DS_Store, kullanım:

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 "/" 

( |pbcopyDoğrudan Mac panonuza kopyalamak için sonuna ekleyin )

Sonra R içinde üretilen değişkeni yapıştırabilirsiniz. Bu, R'nin yeni sürümünde tanımlandıktan sonra, yukarıdaki talimatlardan yüklü paketler arasında geçiş yapabilirsiniz ...

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

0

benim için bu sayfa iyi https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ veya başka bir seçenek yeni seçeneği ve son olarak, örneğin benim pc pencerelerde koymak

.libPaths (c ("D: /Documents/R/win-library/3.2", "C: / Program Dosyaları / R / R-3.2.3 / kütüphane", "C: / Program Dosyaları / R / R-3.2 .0 / kütüphane "," D: /Documents/R/win-library/2.15 ")

benim durumumda son sürümün her yolu her zaman ilk yolu koymak "D: /Documents/R/win-library/3.2" sabit olduğunu ve daha sonra diğer koymak kopyalamak veya herhangi bir paket taşımak gerekmez, içinde benim şekerim sadece ara


0

linux+ bash+ debian+ aptkullanıcılar:

  1. Programının en yeni sürümüne yüklüyorsanız / yükseltiyorsanız R, rootizinlerinizin olduğunu varsayabiliriz . (Gerekli değil, sadece süreci çok daha basit hale getirir; tutarlılık için aşağıdaki komut dosyası tüm yüklemeler sudoiçin kullanır .) Paketler de kurulduğundan , bunları yerleştirmeye izin verilir .Rroot/usr/local/

  2. Aşağıdaki çağrı , en son kararsız sürümün (bir paket oluştururken / kontrol ederken gerektiği gibi) yayınlanmasıyla curlzaten ilgilendiğinizi varsayar;sidRR

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

    bununla birlikte, bu son zamanlarda kararlı bir salım ile kolayca değiştirilebilir ancak örn buster.

  3. Ben am unutmayın değil bir kullanarak anahtarı olarak genellikle tavsiye . Bu, özellikle (aşağıdaki komut dosyasında olduğu gibi) paketleri kendi içinde R ( Rscript -eaşağıda) kurarsak gerekli değildir . Ayrıca, bu tür tuşların birkaç yılda bir kırılma / değiştirme eğilimi vardır. Böylece, elbette aşağıdaki önsöz aşağıdaki dosyaya eklemek için bekliyoruz R.sh:

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

  4. arrayAit Rpaketlerin açıkça ayrıntılı değildir ama ben şahsen yararlı buluyorum bazı örnekler verilmektedir. Aşağıdaki gibi debianpaketle yeni bir kurulum / yükseltme r-recommended, standart 'önerilen' paketlerin (ör. survival) En son sürümünü vermelidir . CRAN sürümü ile ilgili debianpakette güncelleme arasında hafif bir gecikme olabileceğine inanıyorum . Bu nedenle, array'önerilen' Rpaketin en son sürümüne sahip olmanız gerekiyorsa, bunlardan bazılarını aşağıya eklemek isteyebilirsiniz .

  5. Aşağıdaki işlemde kurulan debianpaketler de ne gereklidir ( r-basene de kullanım için ) ne de eksiksizdir ancak bir hayır sağlar. makul bir hayır için önemli olan 'eklentiler'. arasında Rpaketler.

Her neyse ... aşağıdakileri yerleştirin 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

Sonra zaten dizinde varsayarak örneğin, yürütün: source R.sh.

Paketlerin yüklenmesi (ister debianya da R) tek-tek kabuğundan bir döngü içinde biraz fazladır, ancak IMHO hataların basit izleme sağlar. Hayır bağlı olarak biraz zaman alabilir. ait Rpaketler, belki en basit gecede çalışmasına izin için ...


1
'Hayatta kalma'nın neden bu ek paketler listesinde olduğundan emin değilim. (Ve bu bash betiğini yanlış yönlendiriyorum.) O zamandan beri "önerilen" bir paket oldu ... sonsuza dek. Bu komut dosyasıyla birlikte önerilen tüm paketleri kurmuyorsanız, bunun için değiştirilmesi gerekir. Ayrıca, linux kullanan herkes için r-base-devel paket setinin gerekli olacağını düşünün. Ve neden Michael Rutter'in PPA'sını eklemiyorsunuz?
IRTFM

Teşekkür ederim! Yararlı yorumlarınız ışığında güncellendi. Katılıyorum, zaten içinde bulunan bir paketi yüklemeye gerek yok r-recommended. 'r-base-devel' r-base-dev( debianpaket) olarak bilinir - zaten dahil edildi. Güvenlik için bir anahtar kullanmaktan kaçınmıyorum (cevap güncellendi). Cevap bir PPA= Kişisel Paket Arşivi kullanmaktan uzak durur, çünkü bunlar zorunlu olarak bir kişiye bağlıdır ve bu nedenle potansiyel olarak hata yapabilir. Michael Rutter'in söylediği gibi (2012): "CRAN kullanıyorsanız, her iki konumda da aynı paketler sağlandığından, PPA'yı değiştirmek için bir neden yoktur."
dardisco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.