Як дізнатися, яка версія пакета завантажена в R?


405

Я зараз знаходжу, як використовувати мій університетський кластер. У ньому встановлено 2 версії R. Система R 2.11 (Debian 6.0) і R 2.14.2 в нестандартному місці.

Я намагаюся використовувати MPI разом зі снігом. Код, який я намагаюся запустити, наступний

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

Працює без проблем на R 2.11. (Я запускаю сценарій з mpirun -H localhost,n1,n2,n3,n4 -n 1 R --slave -f code.R). Тепер, коли я намагаюся зробити це з R 2.14.2, я отримую таке повідомлення:

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

Тому здається, що R завантажує снігову версію пакета, складену для R 2.11. Я встановив сніг під R 2.14 у свою домашню папку, і я додав у свій код наступні рядки:

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

І вихід перед помилкою підтверджує, що я дійсно працює R 2.14.2, і моя папка R пакетів першою в пошуковому шляху. Але я все-таки отримую помилку.

Отже, моє запитання полягає в тому, як я можу визначити, яка версія пакета завантажена в R? Я можу бачити з installed.packagesусіма встановленими пакетами, тому, можливо, є якась функція, яка перераховує подібну інформацію для завантажених пакетів?


1
Ви знайшли хороше рішення для цього питання? На мій досвід і як свідчить довідка R, і sessionInfo, і packageVersion повертають поточну версію, встановлену в тому місці, з якого було завантажено пакет: це може бути неправильним, якщо інший процес міняв пакети під час сеансу.
RockScience

Відповіді:


519

Ви можете використовувати sessionInfo()для цього.

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

Однак, відповідно до коментарів та відповіді нижче, є кращі варіанти

> packageVersion("snow")

[1] '0,3,9'

Або:

"Rmpi" %in% loadedNamespaces()

1
Дякую. Моєю помилкою було виведення sessionInfo перед завантаженням пакета. Врешті-решт виявилося, що правильна версія пакета була завантажена, але R все ж скаржилася на стару версію. Встановив власну локальну версію R і все працювало як шарм.
mpiktas

45
ТМІ! packageVersion()набагато краще в більшості випадків
Луї Маддокс

1
Я б не радив користуватися sessionInfo. Див. Примітку? SessionInfo: "Інформація про" завантажені "пакунки та простори імен - це поточна версія, встановлена ​​в тому місці, з якого було завантажено пакет: це може бути неправильним, якщо інший процес міняв пакети під час сеансу." Отже: якщо ви хочете дізнатись, завантажений чи ні пакет, краще скористайтеся "Rmpi" %in% loadedNamespaces(); якщо ви хочете знати, яка версія встановлена ​​в певному місці, краще скористайтесяpackageVersion(lib.loc = ...)
RockScience

Див відповідь Гябппя нижче для відповіді , який повертає версію завантаженого пакету (який може відрізнятися від версії на диску): stackoverflow.com/a/37369263/946850
krlmlr

273

Ви можете використовувати, packageVersionщоб побачити, яку версію пакета завантажено

> packageVersion("snow")
[1]0.3.9

Хоча це здається, що ви хочете побачити, яку версію R ви використовуєте, в такому випадку пропозиція @ Джастіна sessionInfo- це шлях


24

Щоб перевірити версію R Execute: R --version

Або після того, як ви знаходитесь в оболонці R, надрукуйте вміст version$version.string

EDIT

Для перевірки версії встановлених пакетів виконайте наступне.

Після завантаження бібліотеки можна виконати sessionInfo ()

Але знати список усіх встановлених пакетів:

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

АБО витягувати конкретну версію бібліотеки, як тільки ви вилучили інформацію за допомогою installed.packageфункції, як описано вище, просто використовуйте ім'я пакета в першому вимірі матриці.

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

Вище буде надруковано версії бібліотеки RANN та графічної бібліотеки.


2
Питання стосувалося версії пакета, а не версії R. А якщо подивитись на мій код, я використовую version.
mpiktas

packinfo[, "Version", drop=F]дає ще більш гарний результат (назва пакету не дублюється).
Бомбардувальник Marmite

21

Технічно кажучи, всі відповіді в цей час є помилковими. packageVersionне повертає версію завантаженого пакета. Він переходить на диск і звідти виймає версію пакета.

У більшості випадків це не зміниться, але іноді це відбувається. Наскільки я можу сказати, єдиний спосіб отримати версію завантаженого пакету - це досить хакітський:

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

де pkgназва пакета.

EDIT: Я не впевнений, коли ця функція була додана, але ви також можете скористатися цією функцією getNamespaceVersion:

getNamespaceVersion(pkg)

`:::`(pkg, .__NAMESPACE__.)$spec[["version"]]є синонімом asNamespace()способу отримання версії пакета.
моряк

3
Ця відповідь настільки важлива. packageVersion()показує лише найкращий результат, installed.packages()але якщо у вас є кілька версій одного пакету, і ви конкретно завантажуєте його, це не дасть вам правильної відповіді.
calico_

1
За hughjonesd.shinyapps.io/rcheology вона доступна з моменту, коли вона доступна вже на R 1.7.0.
krlmlr

20

Ви можете спробувати щось подібне:

  1. package_version(R.version)

  2. getRversion()


11

Рішення GUI:

Якщо ви використовуєте RStudio, ви можете перевірити версію пакета на Packagesпанелі.

введіть тут опис зображення


5

Використовуйте метод R packageDescriptionдля отримання опису встановленого пакета, а для версії просто використовуйте $Versionяк:

packageDescription("AppliedPredictiveModeling")$Version
[1] "1.1-6"

4

Виходячи з попередніх відповідей, ось простий альтернативний спосіб друку R-версії з подальшим назвою та версією кожного пакета, завантаженого в область імен. Він працює в зошиті Юпітера, де у мене виникли проблеми із запуском sessionInfo()та R --version.

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

Вийшов:

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

2

Старе питання, але не серед відповідей - моя улюблена команда для швидкого та короткого огляду всіх завантажених пакетів:

(.packages())

Щоб побачити, яка версія встановлена ​​для всіх завантажених пакетів, просто використовуйте вищевказану команду для підмножини installed.packages().

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

Змінивши номер стовпця (3 для версії пакета), ви можете отримати будь-яку іншу інформацію, що зберігається в installed.packages()легко читається матриці. Нижче наведено приклад кількості версії та залежності:

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

1

Використовуйте наступний код, щоб отримати версію пакетів R, встановлених у системі:

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

1

Просто використовуйте help(package="my_package")та подивіться на показану версію.

Це передбачає, що інших версій пакета немає в тій же .libPaths.


0

Пошук () може дати більш спрощений список доданих пакетів під час сеансу (тобто без детальної інформації, наданої sessionInfo ())

пошук {base} - R Документація
Опис: Надає список доданих пакетів. Пошук ()

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"

1
Так, але sessionInfo також дає номер версії. У моєму випадку останній, як правило, важливіший.
mpiktas
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.