[英]How to find out which package version is loaded in 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()
它在 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 下的 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 包文件夹在搜索路径中的第一个。 但我仍然收到错误。
所以我的问题是如何确定 R 中加载了哪个版本的包? 我可以使用installed.packages
看到所有installed.packages
的软件包,所以也许有一些函数列出了已加载软件包的类似信息?
您可以使用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()
您可以使用packageVersion
查看加载了哪个版本的包
> packageVersion("snow")
[1] ‘0.3.9’
尽管听起来您想查看正在运行的 R 版本,但在这种情况下,@Justin 的sessionInfo
建议是sessionInfo
的方法
从技术上讲,此时的所有答案都是错误的。 packageVersion
不返回加载包的版本。 它转到磁盘,并从那里获取包版本。
这在大多数情况下不会有什么不同,但有时确实如此。 据我所知,获取加载包版本的唯一方法是相当黑客:
asNamespace(pkg)$`.__NAMESPACE__.`$spec[["version"]]
其中pkg
是包名称。
编辑:我不确定何时添加此功能,但您也可以使用getNamespaceVersion
,这更干净:
getNamespaceVersion(pkg)
要检查 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 库和图形库的版本。
你可以尝试这样的事情:
package_version(R.version)
getRversion()
使用 R 方法packageDescription
获取已安装的包描述,对于版本只需使用$Version
作为:
packageDescription("AppliedPredictiveModeling")$Version
[1] "1.1-6"
基于前面的答案,这里有一个简单的替代方法来打印 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"
老问题,但不在答案中的是我最喜欢的命令,可以快速简要地了解所有加载的包:
(.packages())
要查看所有已加载包的安装版本,只需使用上述命令对installed.packages()
进行子集化。
installed.packages()[(.packages()),3]
通过更改列号(包版本为 3),您可以获得以易于阅读的矩阵形式存储在installed.packages()
中的任何其他信息。 以下是版本号和依赖项的示例:
installed.packages()[(.packages()),c(3,5)]
使用以下代码获取系统中安装的R包版本:
installed.packages(fields = c ("Package", "Version"))
Search() 可以给出会话中附加包的更简化列表(即,没有 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"
只需使用help(package="my_package")
并查看显示的版本。
这假设在同一个.libPaths
中没有其他包版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.