如何找出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编译的程序包snow版本。我已将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已安装的所有软件包,因此也许有一些功能可以列出已加载软件包的类似信息?


1
您是否找到了解决此问题的好方法?根据我的经验,正如R帮助所指出的那样,sessionInfo和packageVersion都返回安装该软件包的安装位置的当前版本:如果在会话期间另一个进程正在更改软件包,则可能是错误的。
RockScience 2015年

Answers:


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

45
TMI!packageVersion()在大多数情况下要好得多
Louis Maddox 2015年

1
我不建议使用sessionInfo。请参阅?sessionInfo的注释:“有关'已加载'的软件包和名称空间的信息是在从其加载软件包的位置安装的当前版本:如果在会话期间另一个进程正在更改软件包,则可能是错误的。” 因此:如果您想知道是否已装入软件包,请更好地使用"Rmpi" %in% loadedNamespaces();如果您想知道在特定位置安装了哪个版本,请更好地使用packageVersion(lib.loc = ...)
RockScience

请参阅以下Gábor的答案,以获取返回当前加载的程序包的版本(可能与磁盘上的版本不同)的
答案

273

您可以packageVersion用来查看加载了哪个版本的软件包

> packageVersion("snow")
[1]0.3.9

尽管听起来好像您想查看正在运行的R版本,但是在这种情况下,@ Justin的sessionInfo建议是可行的方法


24

要检查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库和图形库的版本。


2
问题是关于软件包版本,而不是R版本。如果查看我的代码,我使用version
mpiktas 2012年

packinfo[, "Version", drop=F]给出更漂亮的结果(程序包名称不重复)。
Marmite Bomber

21

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

在大多数情况下,这并不会有所不同,但有时会有所不同。据我所知,获取已加载软件包的版本的唯一方法是简单易懂:

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

pkg软件包名称在哪里。

编辑:我不确定何时添加此功能,但您也可以使用getNamespaceVersion,这更干净:

getNamespaceVersion(pkg)

`:::`(pkg, .__NAMESPACE__.)$spec[["version"]]asNamespace()获取软件包版本的方法的同义词。
seasmith,2013年

3
这个答案是如此重要。packageVersion()仅显示您获得的最高结果,installed.packages()但是如果您具有同一软件包的多个版本,并且专门加载了一个,则不会给出正确的答案。
calico_

1
Per hughjonesd.shinyapps.io/rcheology早在R 1.7.0起就可以使用了。
krlmlr

20

您可以尝试如下操作:

  1. package_version(R.version)

  2. getRversion()


11

GUI解决方案:

如果使用的是RStudio,则可以在Packages窗格中检查软件包的版本。

在此处输入图片说明



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()给出的详细信息)

搜索{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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.