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

225

Я сейчас разбираюсь в том, как использовать мой университетский кластер. Он имеет 2 версии R. System wide 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. (Я запускаю script с помощью 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 возвращают текущую версию, установленную в месте, из которого был загружен пакет: это может быть неправильно, если другой процесс изменял пакеты во время сеанса.
Теги:
package
version

9 ответов

287
Лучший ответ

Вы можете использовать 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 и все заработало как шарм.
  • 33
    TMI! packageVersion() намного лучше в большинстве случаев
Показать ещё 1 комментарий
208

Вы можете использовать packageVersion, чтобы узнать, какая версия пакета загружена

> packageVersion("snow")
[1] ‘0.3.9’

Хотя кажется, что вы хотите посмотреть, какую версию R вы используете, и в этом случае предложение @Justin sessionInfo - это способ пойти

19

Вы можете попробовать что-то вроде этого:

  • package_version(R.version)

  • getRversion()

17

Чтобы проверить версию выполнения 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 .
  • 0
    @mpiktas Извините, я неверно истолковал. Посмотрите на редактирование.
Показать ещё 1 комментарий
7

GUI-решение:

Если вы используете RStudio, вы можете проверить версию пакета на панели Packages.

Изображение 4322

7

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

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

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

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

EDIT: я не уверен, когда эта функция была добавлена, но вы также можете использовать getNamespaceVersion, это чище:

getNamespaceVersion(pkg)
  • 0
    `:::`(pkg, .__NAMESPACE__.)$spec[["version"]] является синонимом метода asNamespace() для получения версии пакета.
  • 2
    Этот ответ так важен. packageVersion() только показывает верхний результат в installed.packages() , но если у вас есть несколько версии одного и того же пакета, и вы загружаете один конкретно, он не даст вам правильный ответ.
4

Используйте метод R packageDescription, чтобы получить установленное описание пакета, а для версии просто используйте $Version как:

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

В соответствии с предыдущими ответами, это простой альтернативный способ печати 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"
1

Используйте следующий код для получения версии пакетов R, установленных в системе:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню