Cara tanpa rasa sakit untuk menginstal versi baru R?

158

Andrew Gelman baru-baru ini menyesalkan kurangnya proses upgrade yang mudah untuk R (mungkin lebih relevan pada Windows daripada Linux). Adakah yang punya trik bagus untuk melakukan peningkatan, mulai dari menginstal perangkat lunak hingga menyalin semua pengaturan / paket?

Saran ini terkandung dalam komentar dan adalah apa yang saya gunakan baru-baru ini. Pertama Anda memasang versi baru, lalu jalankan ini di versi lama:

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

Diikuti oleh ini di versi baru:

#--run in the new version
setwd("C:/Temp/")
load("Rpackages")
for (p in setdiff(packages, installed.packages()[,"Package"]))
install.packages(p)
Shane
sumber
1
Seberapa up-to-date solusi yang telah digunakan di sini?
maj
Saya menggunakannya baru-baru ini dan bekerja dengan baik.
Litwos

Jawaban:

74

Hanya untuk kelengkapan, ada beberapa cara untuk mencegah Anda mengalami masalah ini. Seperti yang dikatakan Dirk, simpan paket Anda di direktori lain di komputer Anda.

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

Anda dapat mengubah nilai default .Librarymenggunakan fungsi .libPathsjuga

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

Ini akan menempatkan jalur ini sebagai nilai pertama dalam .Libraryvariabel, dan akan menjadikannya default.

Jika Anda ingin mengotomatiskan ini lebih lanjut, Anda dapat menentukan ini di file Rprofile.site, yang Anda temukan di direktori / etc / dari build R Anda. Maka itu akan memuat secara otomatis setiap kali R dimuat, dan Anda tidak perlu khawatir tentang itu lagi. Anda bisa menginstal dan memuat paket dari direktori yang ditentukan.

Akhirnya, saya memiliki beberapa kode kecil yang disertakan dalam Rprofile.site saya yang memungkinkan saya untuk menginstal ulang semua paket ketika saya menginstal versi R baru. Anda hanya perlu mendaftarkannya sebelum Anda memperbarui ke versi R. yang baru. Saya melakukannya menggunakan file .RData yang berisi daftar yang diperbarui dengan semua paket.

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])
}

Saya membuat daftar kemasan.RData dengan menentukan .Last()di Rprofile.site saya. Ini memperbarui daftar paket jika saya menginstal beberapa:

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

Ketika saya menginstal versi R baru, saya hanya menambahkan elemen yang diperlukan ke file Rprofile.site dan semua paket diinstal ulang. Saya tetap harus menyesuaikan Rprofile.site (menggunakan kontras jumlah, menambahkan kode tambahan untuk Tinn-R, hal-hal ini), jadi ini bukan pekerjaan ekstra. Hanya perlu waktu ekstra untuk menginstal semua paket lagi.

Bit terakhir ini setara dengan apa yang diberikan dalam pertanyaan asli sebagai solusi. Saya hanya tidak perlu khawatir tentang mendapatkan daftar "terinstal" terlebih dahulu.

Sekali lagi, ini tidak berfungsi dengan sempurna jika Anda memiliki paket yang tidak diinstal dari CRAN. Tetapi kode ini mudah diperluas untuk memasukkan yang juga.

Joris Meys
sumber
2
@ Paras: Thx. Jawabannya agak ketinggalan jaman, R 2.12 dan selanjutnya secara otomatis menyimpan paket-paket yang Anda instal sendiri di suatu tempat di perpustakaan standar di luar pohon R utama. Jadi yang harus Anda lakukan sekarang adalah memastikan Anda menemukan perpustakaan itu dan menautkannya, jika itu tidak terjadi dengan sendirinya.
Joris Meys
@ 428790: Di mana saya dapat menemukan perpustakaan yang Anda sebutkan?
Daniel Krizian
@DanielKrizian Lihatlah default di objek internal .Library. Dalam kasus saya, itu menunjuk kembali ke folder instalasi R jika tidak berubah (yang saya terutama tidak suka, tapi yah)
Joris Meys
42

Ini adalah pertanyaan lama tentu saja tetapi mungkin ada jawaban mudah yang baru (hanya bekerja untuk Windows), yang baru saja saya temukan.

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

Cara terbaik untuk melakukan ini adalah dari sistem RGui. Semua paket Anda akan ditransfer ke folder baru dan yang lama akan dihapus atau disimpan (Anda dapat memilih salah satu). Kemudian setelah Anda membuka RStudio lagi, ia segera mengenali bahwa Anda menggunakan versi yang diperbarui. Bagi saya ini bekerja seperti pesona,

Info lebih lanjut tentang {installr} di sini .

Simon

SJDS
sumber
2
Bagaimana dengan paket yang diinstal melalui github?
skan
8
Harus disebutkan bahwa ini untuk Windows.
beroe
27

Dua saran cepat:

  1. Gunakan kumpulan file Gabor yang dikatakan terdiri dari alat bantu misalnya relokasi perpustakaan massal ini. Peringatan: Saya belum menggunakannya.

  2. Jangan pasang pustaka di dalam 'filetree' dari versi R yang diinstal. Pada Windows, saya dapat memasukkan R ke versi C: / opt / R / R- $ tetapi tempatkan semua pustaka ke dalam C: / opt / R / library / menggunakan cuplikan berikut ini karena meringankan masalah di tempat pertama:

$ cat .Renviron         # this is using MSys/MinGW which looks like Cygwin  
## Example .Renviron on Windows    
R_LIBS="C:/opt/R/library"
Dirk Eddelbuettel
sumber
Saya ingin tahu apakah mentransfer paket dari, katakanlah, R 2.8 ke R.9 menyebabkan masalah? Atau semuanya akan baik-baik saja selama Anda melakukan pembaruan. Paket dalam versi baru?
Eduardo Leoni
Saya telah melakukan ini cukup lama dan tidak memiliki masalah. R biasanya "maju kompatibel". Dan IIRC hanya satu peningkatan (mungkin R 1.9 -> R 2.0) yang diperlukan untuk membangun kembali semua perpustakaan.
Dirk Eddelbuettel
5
Saya juga biasanya hanya menyalin folder Library saya ke instalasi baru saya dan menjalankan update.packages. Tampaknya berfungsi dengan baik. Namun, folder instal opsional jauh lebih elegan.
kpierce8
Hanya untuk menunjukkan - Saya telah menambahkan jawaban dengan kode R melakukan saran Dirk (untuk pengguna R windows)
Tal Galili
26

Metode yang disarankan di atas tidak akan berfungsi sepenuhnya jika Anda memiliki paket yang bukan dari CRAN. Misalnya, paket pribadi atau paket yang diunduh dari situs non-CRAN.

Metode pilihan saya di Windows (meningkatkan 2.10.1 ke 2.11.0):

  1. Instal R-2.11.0
  2. Salin R-2.10.0/library/*keR-2.11.0/library/
  3. Jawab "tidak" pada prompt yang menanyakan apakah Anda boleh menimpa.
  4. Mulai R 2.11.0
  5. Jalankan perintah R. update.packages()
Kevin Wright
sumber
7

Sehubungan dengan solusi yang diberikan dalam pertanyaan, mungkin tidak mudah untuk menjalankan versi R lama Anda jika Anda telah menginstal versi baru. Dalam hal ini, Anda masih dapat menginstal ulang semua paket yang hilang dari versi R sebelumnya sebagai berikut.

# 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) 
      }
    }

(Perhatikan bahwa argumen list.files()di baris kode pertama harus menjadi jalur ke direktori pustaka untuk versi R Anda sebelumnya, di mana semua folder paket dalam versi sebelumnya berada. Dalam kasus saya saat ini, ini adalah"/Library/Frameworks/R.framework/Versions/3.2/Resources/library" . Ini akan berbeda jika versi R sebelumnya bukan 3.2, atau jika Anda menggunakan Windows.)

The ifPernyataan memastikan bahwa sebuah paket tidak diinstal jika

  • Sudah diinstal dalam versi R baru, atau
  • Telah diinstal sebagai dependensi dari paket yang diinstal pada iterasi forloop sebelumnya.
Raffaele Vacca
sumber
Ini menyelesaikan masalah saya, terima kasih! Pertanyaan ini mungkin terdengar agak bodoh, tetapi bisakah saya menghapus perpustakaan lama?
m_c
4

Mengikuti saran Dirk, berikut adalah beberapa kode R untuk melakukannya di windows: Cara mudah memutakhirkan R di windows XP

Pembaruan (15.04.11): Saya menulis posting lain tentang masalah ini, menjelaskan bagaimana menangani masalah umum peningkatan R di windows 7

Tal Galili
sumber
2
Untuk versi R terbaru, Tal memiliki paket bernama installryang mengotomatiskan proses ini (saat ini hanya di Windows) r-statistics.com/tag/installr atau github.com/talgalili/installr
Louis Maddox
1
Run Rgui.exe dari C: \ Program Files \ R \ R-3.6.0 \ bin \ i386 dan menulis kode untuk konsol: install.packages(installr); library(installr); updateR(TRUE). Di akhir, [1] TRUEmuncul. Dengan paket luar biasa dari Galili, saya beralih dari R 3.6.0 ke R 3.6.1 dengan sangat mudah. Terima kasih, Tal.
Erdogan CEVHER
2

Dua pilihan:

  1. Laksanakan jawaban saya di sini
  2. Jika Anda menggunakan R di bawah Eclipse dengan StatET, buka Run Configurations , klik tab Console dan di kotak yang disebut R snippet run setelah startup tambahkan baris ini dengan direktori pilihan Anda:.libPaths("C:/R/library")
Fred
sumber
1

Saya menggunakan Windows 8 dan untuk beberapa alasan aneh, saya tidak pernah dapat menginstal paket menggunakan koneksi internet saya.

Saya biasanya menginstalnya menggunakan file .zip dari CRAN.

Setelah saya beralih dari R 3.2.5 ke R 3.3.1.

Saya hanya menyalin paket dari

C:\Path\to\packa\R\win-library\3.2untuk C:\Path\to\packa\R\win-library\3.3.

Dan kemudian saya memulai kembali sesi R. Bekerja dengan sempurna. Saya belum memeriksa apakah SEMUA paket berfungsi dengan baik. Tapi, yang saya periksa berfungsi dengan baik. Semoga peretasan ini bekerja untuk semua orang.

Bersulang.

Pragyaditya Das
sumber
1

Jawaban yang diterima mungkin bekerja jika Anda memiliki pandangan ke depan, tetapi saya sudah menyingkirkan versi lama sehingga tidak dapat mengikuti petunjuk ini. Langkah-langkah yang dijelaskan di bawah ini berfungsi untuk memutakhirkan OSX dari 2.1 dan 3.1.

DIPERBARUI: Untuk mendapatkan direktori untuk versi terbaru Anda (alih-alih mengetikkan 3.1 atau 3.2) Anda dapat menggunakan perintah di bawah ini. Yang kedua mengkonversi langsung ke variabel-R, melompati .dan ..dan .DS_Store, menggunakan:

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

(Menambahkan |pbcopy ke akhir untuk menyalinnya langsung ke clipboard Mac Anda)

Kemudian dalam R Anda dapat menempelkan variabel yang dihasilkan. Setelah itu didefinisikan dalam versi baru R, Anda dapat mengulangi paket yang diinstal dari instruksi di atas ...

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

bagi saya halaman ini baik https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ atau opsi lain hanya menginstal yang baru pilihan dan pada akhirnya Anda masukkan, misalnya di windows di pc saya

.libPaths (c ("D: /Documents/R/win-library/3.2", "C: / Program Files / R / R-3.2.3 / library", "C: / Program Files / R / R-3.2 .0 / library "," D: /Documents/R/win-library/2.15 ")

setiap path versi terakhir dalam kasus saya saya selalu meletakkan path pertama adalah "D: /Documents/R/win-library/3.2" yang diperbaiki dan kemudian saya meletakkan yang lain karena Anda tidak perlu menyalin atau memindahkan paket apa pun, di sugest saya sebut saja

juanprimate
sumber
0

linux+ bash+ debian+ aptpengguna:

  1. Jika Anda menginstal / meningkatkan ke versi terbaru R, maka kami dapat menganggap Anda memiliki rootizin. (Tidak penting, hanya membuat prosesnya jauh lebih sederhana; untuk konsistensi, skrip di bawah ini digunakan sudountuk semua pemasangan.) Karena Rpaket-paket ini juga diinstal oleh root, maka diizinkan untuk menempatkannya di sini /usr/local/.

  2. Panggilan ke curlbawah mengasumsikan Anda sudah tertarik pada sidrilis R, versi terbaru yang sangat tidak stabil (seperti yang diperlukan saat membangun / memeriksa Rpaket) yaitu

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

    meskipun ini dapat dengan mudah diganti dengan rilis stabil terbaru mis buster.

  3. Perhatikan bahwa saya tidak menggunakan kunci seperti yang biasanya disarankan . Ini tidak penting, terutama jika (seperti dalam skrip berikut) kami menginstal paket di dalamnya R (di Rscript -ebawah). Juga, kunci tersebut memiliki kecenderungan untuk pecah / berubah setiap beberapa tahun. Dengan demikian, Anda tentu saja dapat menambahkan kata pengantar berikut ke file R.shyang berikut:

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

  4. Paket array- Rpaket ini jelas tidak lengkap tetapi memberikan beberapa contoh yang menurut saya bermanfaat. Instalasi / peningkatan baru dengan debianpaket ini r-recommended, seperti di bawah ini, harus memberikan versi terbaru dari semua paket standar yang 'direkomendasikan' (mis survival.). Saya percaya mungkin ada sedikit jeda antara rilis CRAN dan pembaruan untuk debianpaket yang relevan . Dengan demikian, Anda mungkin ingin menambahkan beberapa di arraybawah ini jika memiliki versi terbaru dari Rpaket 'disarankan' sangat penting.

  5. debianPaket - paket yang diinstal pada proses di bawah ini juga tidak penting (untuk digunakan r-base) maupun lengkap tetapi tidak. dari 'add-on' yang penting untuk tidak masuk akal. dari Rpaket.

Pokoknya ... tempatkan yang berikut ini 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

Kemudian jalankan, misalnya dengan asumsi dalam direktori sudah: source R.sh .

Menginstal paket (apakah debianatau R) satu per satu dalam satu lingkaran dari shell agak tidak efisien, tetapi memungkinkan untuk penelusuran kesalahan yang lebih sederhana, IMHO. Dapat memakan waktu tergantung pada no. dari Rpaket, jadi mungkin paling sederhana untuk membiarkan menjalankan semalam ...

dardisco
sumber
1
Tidak yakin mengapa 'survival' ada dalam daftar paket tambahan itu. (Dan sangat mungkin saya menyesatkan skrip bash ini.) Sudah menjadi paket "yang disarankan" sejak ... selamanya. Jika Anda tidak menginstal semua paket yang disarankan dengan skrip itu, itu harus dimodifikasi untuk melakukannya. Juga berpikir bahwa set paket r-base-devel akan diperlukan bagi siapa saja yang menggunakan linux. Dan mengapa tidak menambahkan PPA Michael Rutter?
IRTFM
Terima kasih! Diperbarui berdasarkan komentar Anda yang bermanfaat. Setuju, tidak perlu menginstal paket yang sudah ada secara rutin r-recommended. 'r-base-devel' dikenal sebagai r-base-dev( debianpaket) - sudah disertakan. Saya tidak benci menggunakan kunci untuk keamanan (jawaban diperbarui). Jawabannya tinggal jauh dari menggunakan PPA= Paket Arsip Pribadi karena ini tergantung pada satu orang dan dengan demikian berpotensi salah. Seperti yang dikatakan Michael Rutter sendiri (2012): "Jika Anda telah menggunakan CRAN, maka tidak ada alasan untuk berubah ke PPA, karena paket yang sama disediakan di kedua lokasi."
dardisco