ChatGPT解决这个技术问题 Extra ChatGPT

如何找出 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 查看所有已安装的软件包,所以也许有一些函数列出了已加载软件包的类似信息?

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

f
fdetsch

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

谢谢。我的错误是在加载包之前输出 sessionInfo 。最后事实证明,加载了正确版本的包,但 R 仍然抱怨旧版本。安装了我自己的本地 R 版本,一切都像魅力一样。
TMI! packageVersion() 在大多数情况下要好得多
我不建议使用 sessionInfo。请参阅 ?sessionInfo 的注释:“关于‘加载’包和命名空间的信息是安装在加载包的位置的当前版本:如果另一个进程在会话期间更改包,则可能是错误的。” 所以:如果你想知道包是否被加载,最好使用 "Rmpi" %in% loadedNamespaces() ;如果您想知道特定位置安装了哪个版本,最好使用 packageVersion(lib.loc = ...)
有关返回当前加载的包版本(可能与磁盘版本不同)的答案,请参阅下面 Gábor 的答案:stackoverflow.com/a/37369263/946850
S
Salim B

您可以使用 utils::packageVersion 查看安装的软件包版本:

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

Note that

一个包将不会被“找到”,除非它有一个包含有效版本字段的说明文件。当没有找到包目录和有合适的目录但没有有效的说明文件时,会给出不同的警告。

虽然听起来您想查看您正在运行的 R 版本,但在这种情况下 @Justin's sessionInfo suggestion 是要走的路。


这个答案显然对我有利,因为您可以使用它来编写简洁的条件。请参阅下面的答案以获取示例。
G
Gabor Csardi

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

在大多数情况下,这不会产生影响,但有时会。据我所知,获取加载包版本的唯一方法是相当 hackish:

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

其中 pkg 是包名称。

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

getNamespaceVersion(pkg)

`:::`(pkg, .__NAMESPACE__.)$spec[["version"]] 是获取软件包版本的 asNamespace() 方法的同义词。
这个答案太重要了。 packageVersion() 仅向您显示 installed.packages() 中的最高结果,但如果您有同一个包的多个版本,并且您专门加载了一个,它不会给您正确的答案。
根据 hughjonesd.shinyapps.io/rcheology,它早在 R 1.7.0 就已经可用。
默认情况下,packageVersion 似乎确实返回了已加载包的版本。 lib.loc 参数的文档如下:“NULL 的默认值对应于当前已知的所有库。如果使用默认值,则在库之前搜索 加载的包 和命名空间。”强调我的。
z
zx8754

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


问题是关于包版本,而不是 R 版本。如果查看我的代码,我使用 version
packinfo[, "Version", drop=F] 给出了更 pretty 的结果(包名不重复)。
u
user1317221_G

你可以尝试这样的事情:

package_version(R.version) getRversion()


e
epo3

图形界面解决方案:

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

https://i.stack.imgur.com/aQP0w.png


k
krishna Prasad

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

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

有一个直接解析 Version 字段的便捷函数 utils::packageVersion(),请参阅 stackoverflow.com/a/11103291/7196903
j
joelostblom

根据前面的答案,这里是打印 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"

T
TimTeaFan

老问题,但不是答案之一是我最喜欢的命令来快速和简短地了解所有加载的包:

(.packages())

要查看所有已加载软件包的安装版本,只需使用上述命令子集 installed.packages()

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

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

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

j
josliber

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

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

M
Maria Wollestonecraft

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

search {base}- R 文档
描述:给出附加包的列表。 Search()

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"

是的,但是 sessionInfo 也给出了版本号。在我的情况下,后者通常更重要。
N
NelsonGon

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

这假定同一 .libPaths 中没有其他软件包版本。


D
Dan Chaltiel

要添加@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 package (v2.0.0) 于 2021 年 8 月 23 日创建