如何找出在R中加载了哪个包版本?

我正在研究如何使用我的大学集群。它安装了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()

它在r2.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似乎加载了为r2.11编译的snow版本包。我已经在r2.14下将snow安装到我的主文件夹中,并在代码中添加了以下代码行:

.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 packages文件夹在搜索路径的第一个。但我还是得到了错误。

我的问题是,如何确定R中加载的是哪个版本的包?我可以用installed.packages看到所有已安装的包,所以也许有一些函数列出了加载包的类似信息?

565253 次浏览

您可以使用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()

要检查R的版本,执行:R --version

或者在R shell中打印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库和图形库的版本。

你可以尝试这样做:

  1. # EYZ0

  2. # EYZ0

使用如下代码获取系统中安装的R包版本。

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

根据前面的回答,下面是打印R-version的一种简单替代方法,后面是命名空间中加载的每个包的名称和版本。它在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"

使用R方法packageDescription来获取已安装包的描述,对于版本,只需使用$Version作为:

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

从技术上讲,目前所有的答案都是错误的。packageVersion不返回加载包的版本。它进入磁盘,并从那里获取包的版本。

这在大多数情况下不会有什么不同,但有时会有。据我所知,获得加载包版本的唯一方法是相当粗糙的:

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

其中pkg是包名。

编辑:我不确定这个函数是什么时候添加的,但你也可以使用getNamespaceVersion,这更干净:

getNamespaceVersion(pkg)

GUI解决方案:

如果您正在使用RStudio,那么您可以在Packages窗格中检查包版本。

enter image description here

Search()可以给出一个会话中附加包的更简化的列表(即,没有sessionInfo()给出的详细信息)

search {base}- R Documentation
. txt 描述:给出附加包的列表。# EYZ0 < / p >

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"

只需使用help(package="my_package")并查看显示的版本。

这假设在同一个.libPaths中没有其他包版本。

老问题,但答案中没有我最喜欢的命令,以快速和简短的概述所有加载的包:

(.packages())

要查看所有加载的包都安装了哪个版本,只需使用上面的命令对installed.packages()进行子集化。

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

通过更改列号(包版本为3),您可以以易于阅读的矩阵形式获得存储在installed.packages()中的任何其他信息。下面是版本号和依赖项的示例:

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

要补充@GSee的答案,请注意,utils::packageVersion()的返回值不是character,您可以完美地使用它来编写条件:

packageVersion("dplyr")
#> [1] '1.0.7'
packageVersion("dplyr")>1
#> [1] TRUE
packageVersion("dplyr")>'1.0'
#> [1] TRUE
packageVersion("dplyr")>'1.1'
#> [1] FALSE

reprex包 (v2.0.0)创建于2021-08-23