Как узнать, какая версия пакета загружена в R?


407

Я нахожусь в процессе выяснения, как использовать мой университетский кластер. На нем установлены 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 загружает пакет Snow версии, скомпилированный для R 2.11. Я установил snow под 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

Ответы:


520

Вы можете использовать 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
TMI! 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 выполните: R --version

Или после входа в оболочку R выведите содержимое version$version.string

РЕДАКТИРОВАТЬ

Для проверки версии установленных пакетов сделайте следующее.

После загрузки библиотеки вы можете выполнить 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 Bomber

21

Технически говоря, все ответы на данный момент неверны. packageVersionне возвращает версию загруженного пакета. Он идет на диск и получает версию пакета оттуда.

Это не будет иметь значения в большинстве случаев, но иногда это так. Насколько я могу судить, единственный способ получить версию загруженного пакета - довольно хакерский:

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

где pkg имя пакета

РЕДАКТИРОВАТЬ: Я не уверен, когда эта функция была добавлена, но вы также можете использовать 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-версии, сопровождаемый именем и версией каждого пакета, загруженного в пространство имен. Это работает в ноутбуке Jupyter, где у меня были проблемы с бегом 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

Search () может дать более упрощенный список прикрепленных пакетов в сеансе (т. Е. Без подробной информации, предоставленной sessionInfo ())

search {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.