2012-06-19 106 views
253

我正在研究如何使用我的大學集羣。它有2個版本的R安裝。系統範圍R 2.11(Debian 6.0)和R 2.14.2非標準位置。如何找出在R中加載哪個軟件包版本?

我正在嘗試將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下安裝到雪我家的文件夾,並添加以下行到我的代碼:

.libPaths("/soft/R/lib/R/library") 
.libPaths("~/R/x86_64-pc-linux-gnu-library/2.11") 
print(.libPaths()) 
print(sessionInfo()) 
print(version) 

和錯誤前的輸出證實我確實運行v 2.14.2和我的R封裝文件夾首先在搜索路徑中。但我仍然得到錯誤。

所以我的問題是如何確定在R中加載哪個版本的軟件包?我可以看到installed.packages所有已安裝的軟件包,所以也許有一些函數列出了加載軟件包的類似信息?

+0

您是否找到了解決此問題的好方法?根據我的經驗以及R幫助指出,sessionInfo和packageVersion都會返回安裝在加載軟件包位置的當前版本:如果另一個進程在會話期間一直在更改軟件包,則可能會出現錯誤。_ – RockScience

回答

317

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

謝謝。我的錯誤是在加載包之前輸出sessionInfo。最後發現包裝的正確版本已經加載,但R仍然抱怨舊版本。安裝了我自己的本地版R,一切都像魅力一樣。 – mpiktas

+23

TMI! 'packageVersion()'在大多數情況下好得多 –

+0

我不建議使用'sessionInfo'。請參閱?sessionInfo:_的註釋:「已加載的包和名稱空間的信息是安裝在加載包的位置上的當前版本:如果另一個進程在會話期間更改了包,則可能會出錯。」_ 所以:如果你想知道它是否被加載,最好使用%loadedNamespaces()中的''Rmpi'%';如果你想知道哪個版本安裝在特定位置,最好使用'packageVersion(lib.loc = ...)' – RockScience

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版本。如果看我的代碼,我使用'版本'。 – mpiktas

+0

@mpiktas對不起,我誤解了。看看編輯。 – phoxis

215

您可以使用packageVersion看什麼版本的包被加載

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

雖然這聽起來像你想看到你正在運行的R版本,在這種情況下,@賈斯汀的sessionInfo建議是這樣的去

19

你可以嘗試這樣的事情:

  1. package_version(R.version)

  2. getRversion()

+0

沒問題,解決了,謝謝。 – rnorouzian

1

使用下面的代碼,即可獲得系統中安裝的R程序包的版本:

installed.packages(fields = c ("Package", "Version")) 
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" 
4

使用R方法packageDescription獲取安裝的軟件包描述和版本只使用$Version爲:

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

從技術上來講,所有的答案在這一次是錯誤的。 packageVersion不會返回已加載軟件包的版本。它進入磁盤,並從那裏獲取軟件包版本。

這在大多數情況下都沒有什麼不同,但有時候確實如此。據我所知道的,只有這樣,才能得到一個加載包的版本是相當的hackish:

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

其中pkg是軟件包的名稱。

編輯:我不知道什麼時候加入這個功能,但你也可以使用getNamespaceVersion,這是清潔:

getNamespaceVersion(pkg) 
+0

'\'::: \'(pkg,.__ NAMESPACE __。)$ spec [[「version」]]''asNamespace()'獲取包版本的方法的同義詞。 – seasmith

+1

這個答案如此重要。 'packageVersion()'只顯示'installed.packages()'中的最高結果,但如果你有多個版本的同一個軟件包,並且你專門加載了一個版本,它不會給你正確的答案。 –

8

的GUI解決方案:

如果您正在使用RStudio那麼你可以檢查Packages窗格中的軟件包版本。

enter image description here

0

搜索()可以給出附加包的更簡化的列表在一個會話(即,沒有通過sessionInfo()給出的詳細信息)

搜索{鹼} - 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" 
+0

是的,但sessionInfo也給出了版本號。在我看來,後者通常更重要。 – mpiktas

相關問題