Bagaimana cara mengetahui versi paket mana yang dimuat dalam R?

405

Saya sedang dalam proses mencari tahu bagaimana menggunakan cluster universitas saya. Ini memiliki 2 versi R yang diinstal. Sistem lebar R 2.11 (Debian 6.0) dan R 2.14.2 di lokasi non-standar.

Saya mencoba menggunakan MPI bersama salju. Kode yang saya coba jalankan adalah sebagai berikut

library(snow)
library(Rmpi)
cl <- makeMPIcluster(mpi.universe.size()-1)
stopCluster(cl)
mpi.quit()

Ia bekerja tanpa masalah di R 2.11. (Saya meluncurkan skrip dengan mpirun -H localhost,n1,n2,n3,n4 -n 1 R --slave -f code.R). Sekarang ketika saya mencoba melakukannya dengan R 2.14.2, saya mendapatkan pesan berikut:

Error: This is R 2.11.1, package 'snow' needs >= 2.12.1
In addition: Warning message:

Jadi sepertinya R memuat versi paket salju yang dikompilasi untuk R 2.11. Saya telah menginstal salju di bawah R 2.14 ke folder rumah saya dan saya menambahkan baris berikut ke kode saya:

.libPaths("/soft/R/lib/R/library")
.libPaths("~/R/x86_64-pc-linux-gnu-library/2.11")
print(.libPaths())
print(sessionInfo())
print(version)

Dan output sebelum kesalahan mengkonfirmasi bahwa saya memang menjalankan R 2.14.2 dan folder paket R saya adalah yang pertama di jalur pencarian. Tapi saya masih mendapatkan kesalahan.

Jadi pertanyaan saya adalah bagaimana cara menentukan versi paket mana yang dimuat dalam R? Saya dapat melihat dengan installed.packagessemua paket yang diinstal, jadi mungkin ada beberapa fungsi yang mencantumkan informasi serupa untuk paket yang dimuat?

mpiktas
sumber
1
apakah Anda menemukan solusi yang baik untuk masalah ini? Dalam pengalaman saya dan seperti yang ditunjukkan oleh bantuan R, sessionInfo dan packageVersion mengembalikan versi saat ini yang diinstal di lokasi paket itu diambil dari: itu bisa salah jika proses lain telah mengubah paket selama sesi.
RockScience

Jawaban:

519

Anda dapat menggunakannya sessionInfo()untuk mencapai itu.

> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] graphics  grDevices utils     datasets  stats     grid      methods   base     

other attached packages:
[1] ggplot2_0.9.0  reshape2_1.2.1 plyr_1.7.1    

loaded via a namespace (and not attached):
 [1] colorspace_1.1-1   dichromat_1.2-4    digest_0.5.2       MASS_7.3-18        memoise_0.1        munsell_0.3       
 [7] proto_0.3-9.2      RColorBrewer_1.0-5 scales_0.2.0       stringr_0.6       
> 

Namun, sesuai komentar dan jawabannya di bawah, ada opsi yang lebih baik

> packageVersion("snow")

[1] '0.3.9'

Atau:

"Rmpi" %in% loadedNamespaces()
Justin
sumber
1
Terima kasih. Kesalahan saya adalah keluaran sessionInfo sebelum pemuatan paket. Pada akhirnya ternyata versi paket yang benar dimuat, tetapi R masih mengeluh tentang versi yang lama. Menginstal R versi lokal saya sendiri dan semuanya bekerja seperti pesona.
mpiktas
45
TMI! packageVersion()jauh lebih baik dalam banyak kasus
Louis Maddox
1
Saya tidak akan menyarankan untuk digunakan sessionInfo. Lihat Catatan? SessionInfo: "Informasi tentang paket dan ruang nama 'dimuat' adalah versi saat ini yang diinstal di lokasi dari mana paket itu dimuat: itu bisa salah jika proses lain telah mengubah paket selama sesi." Jadi: jika Anda ingin tahu apakah paket itu dimuat atau tidak, lebih baik gunakan "Rmpi" %in% loadedNamespaces(); jika Anda ingin tahu versi mana yang diinstal di lokasi tertentu, lebih baik gunakanpackageVersion(lib.loc = ...)
RockScience
Lihat jawaban Gábor di bawah ini untuk jawaban yang mengembalikan versi paket yang saat ini dimuat (yang mungkin berbeda dari versi di-disk): stackoverflow.com/a/37369263/946850
krlmlr
273

Anda dapat menggunakan packageVersionuntuk melihat versi paket apa yang dimuat

> packageVersion("snow")
[1]0.3.9

Walaupun sepertinya Anda ingin melihat versi R yang Anda jalankan, dalam hal ini sessionInfosaran @ Justin adalah cara untuk melakukannya

GSee
sumber
24

Untuk memeriksa versi R, jalankan: R --version

Atau setelah Anda berada di shell R cetak isi version$version.string

EDIT

Untuk memeriksa versi paket yang diinstal lakukan hal berikut.

Setelah memuat perpustakaan, Anda dapat menjalankan sessionInfo ()

Tetapi untuk mengetahui daftar semua paket yang diinstal:

packinfo <- installed.packages(fields = c("Package", "Version"))
packinfo[,c("Package", "Version")]

ATAU untuk mengekstrak versi pustaka tertentu, setelah Anda mengekstraksi informasi menggunakan installed.packagefungsi seperti di atas, cukup gunakan nama paket di dimensi pertama dari matriks.

packinfo["RANN",c("Package", "Version")]
packinfo["graphics",c("Package", "Version")]

Di atas akan mencetak versi perpustakaan RANN dan perpustakaan grafik.

phoxis
sumber
2
Pertanyaannya adalah tentang versi paket, bukan versi R. Dan jika melihat kode saya, saya gunakan version.
mpiktas
packinfo[, "Version", drop=F]memberikan hasil yang lebih cantik (nama paket tidak digandakan).
Marmite Bomber
21

Secara teknis, semua jawaban saat ini salah. packageVersiontidak mengembalikan versi paket yang dimuat. Ia pergi ke disk, dan mengambil versi paket dari sana.

Ini tidak akan membuat perbedaan dalam kebanyakan kasus, tetapi kadang-kadang itu membuat perbedaan. Sejauh yang saya tahu, satu-satunya cara untuk mendapatkan versi dari paket yang dimuat adalah cara yang agak meretas:

asNamespace(pkg)$`.__NAMESPACE__.`$spec[["version"]]

dimana pkgnama paketnya

EDIT: Saya tidak yakin kapan fungsi ini ditambahkan, tetapi Anda juga dapat menggunakan getNamespaceVersion, ini lebih bersih:

getNamespaceVersion(pkg)
Gabor Csardi
sumber
`:::`(pkg, .__NAMESPACE__.)$spec[["version"]]adalah sinonim dari asNamespace()metode untuk mendapatkan versi paket.
seasmith
3
Jawaban ini sangat penting. packageVersion()hanya menampilkan Anda hasil teratas installed.packages()tetapi jika Anda memiliki beberapa versi dari paket yang sama, dan Anda memuatnya secara khusus, itu tidak akan memberi Anda jawaban yang benar.
calico_
1
Per hughjonesd.shinyapps.io/rcheology ini sudah tersedia sejak tersedia sedini R 1.7.0.
krlmlr
20

Anda dapat mencoba sesuatu seperti ini:

  1. package_version(R.version)

  2. getRversion()

Sathish
sumber
11

Solusi GUI:

Jika Anda menggunakan RStudio maka Anda dapat memeriksa versi paket di Packagespanel.

masukkan deskripsi gambar di sini

epo3
sumber
5

Gunakan metode R packageDescriptionuntuk mendapatkan deskripsi paket yang diinstal dan untuk versi cukup gunakan $Versionsebagai:

packageDescription("AppliedPredictiveModeling")$Version
[1] "1.1-6"
krishna Prasad
sumber
4

Berdasarkan jawaban sebelumnya, berikut adalah cara sederhana untuk mencetak versi R, diikuti dengan nama dan versi setiap paket yang dimuat di namespace. Ini bekerja di notebook Jupyter, di mana saya mengalami kesulitan menjalankan sessionInfo()dan R --version.

print(paste("R", getRversion()))
print("-------------")
for (package_name in sort(loadedNamespaces())) {
    print(paste(package_name, packageVersion(package_name)))
}

Di luar:

[1] "R 3.2.2"
[1] "-------------"
[1] "AnnotationDbi 1.32.2"
[1] "Biobase 2.30.0"
[1] "BiocGenerics 0.16.1"
[1] "BiocParallel 1.4.3"
[1] "DBI 0.3.1"
[1] "DESeq2 1.10.0"
[1] "Formula 1.2.1"
[1] "GenomeInfoDb 1.6.1"
[1] "GenomicRanges 1.22.3"
[1] "Hmisc 3.17.0"
[1] "IRanges 2.4.6"
[1] "IRdisplay 0.3"
[1] "IRkernel 0.5"
joelostblom
sumber
2

Pertanyaan lama, tetapi tidak ada di antara jawabannya adalah perintah favorit saya untuk mendapatkan ikhtisar singkat dan singkat dari semua paket yang dimuat:

(.packages())

Untuk melihat versi mana yang diinstal dari semua paket yang dimuat, cukup gunakan perintah di atas untuk subset installed.packages().

installed.packages()[(.packages()),3]

Dengan mengubah nomor kolom (3 untuk versi paket) Anda bisa mendapatkan informasi lain yang tersimpan dalam installed.packages()matriks yang mudah dibaca. Di bawah ini adalah contoh untuk nomor versi dan ketergantungan:

installed.packages()[(.packages()),c(3,5)]
TimTeaFan
sumber
1

Gunakan kode berikut untuk mendapatkan versi paket R yang terinstal di sistem:

installed.packages(fields = c ("Package", "Version"))
Anjana
sumber
1

Cukup gunakan help(package="my_package") dan lihat versi yang ditampilkan.

Ini mengasumsikan tidak ada versi paket lain yang sama .libPaths.

NelsonGon
sumber
0

Cari () dapat memberikan daftar paket terlampir yang lebih disederhanakan dalam suatu sesi (yaitu, tanpa info rinci yang diberikan oleh sessionInfo ())

search {base} - R
Deskripsi Dokumentasi : Memberikan daftar paket terlampir. Cari()

search()
#[1] ".GlobalEnv"        "package:Rfacebook" "package:httpuv"   
#"package:rjson"    
#[5] "package:httr"      "package:bindrcpp"  "package:forcats"   # 
#"package:stringr"  
#[9] "package:dplyr"     "package:purrr"     "package:readr"     
#"package:tidyr"    
#[13] "package:tibble"    "package:ggplot2"   "package:tidyverse" 
#"tools:rstudio"    
#[17] "package:stats"     "package:graphics"  "package:grDevices" 
#"package:utils"    
#[21] "package:datasets"  "package:methods"   "Autoloads"         
#"package:base"
Maria Wollestonecraft
sumber
1
Ya, tetapi sessionInfo juga memberikan nomor versi. Dalam kasus saya yang terakhir biasanya lebih penting.
mpiktas