Làm thế nào để tìm ra phiên bản gói nào được tải trong R?


405

Tôi đang trong quá trình tìm ra cách sử dụng cụm trường đại học của mình. Nó có 2 phiên bản R được cài đặt. Toàn hệ thống R 2.11 (Debian 6.0) và R 2.14.2 ở vị trí không chuẩn.

Tôi đang cố gắng sử dụng MPI cùng với tuyết. Mã tôi đang cố chạy là như sau

library(snow)
library(Rmpi)
cl <- makeMPIcluster(mpi.universe.size()-1)
stopCluster(cl)
mpi.quit()

Nó hoạt động mà không có vấn đề trên R 2.11. (Tôi khởi chạy kịch bản với mpirun -H localhost,n1,n2,n3,n4 -n 1 R --slave -f code.R). Bây giờ khi tôi thử làm điều đó với R 2.14.2, tôi nhận được thông báo sau:

Error: This is R 2.11.1, package 'snow' needs >= 2.12.1
In addition: Warning message:

Vì vậy, có vẻ như R tải phiên bản tuyết gói được biên dịch cho R 2.11. Tôi đã cài đặt tuyết dưới R 2.14 vào thư mục nhà của mình và tôi đã thêm các dòng sau vào mã của mình:

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

Và đầu ra trước lỗi xác nhận rằng tôi thực sự đang chạy R 2.14.2 và thư mục gói R của tôi là đầu tiên trong đường dẫn tìm kiếm. Nhưng tôi vẫn nhận được lỗi.

Vì vậy, câu hỏi của tôi là làm thế nào để tôi xác định phiên bản của gói được tải trong R? Tôi có thể thấy với installed.packagestất cả các gói được cài đặt, vì vậy có thể có một số chức năng liệt kê thông tin tương tự cho các gói được tải?


1
Bạn đã tìm thấy một giải pháp tốt cho vấn đề này? Theo kinh nghiệm của tôi và như trợ giúp R ​​chỉ ra, cả sessionInfo và góiVersion đều trả về phiên bản hiện tại được cài đặt tại vị trí mà gói được tải từ: có thể sai nếu một quy trình khác đã thay đổi các gói trong phiên.
RockScience

Câu trả lời:


519

Bạn có thể sử dụng sessionInfo()để thực hiện điều đó.

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

Tuy nhiên, theo nhận xét và câu trả lời dưới đây, có những lựa chọn tốt hơn

> packageVersion("snow")

[1] '0,3,9'

Hoặc là:

"Rmpi" %in% loadedNamespaces()

1
Cảm ơn. Lỗi của tôi là xuất sessionInfo trước khi tải gói. Cuối cùng, hóa ra phiên bản chính xác của gói đã được tải, nhưng R vẫn phàn nàn về phiên bản cũ. Cài đặt phiên bản R cục bộ của riêng tôi và mọi thứ hoạt động như một bùa mê.
mpiktas

45
TMI! packageVersion()tốt hơn nhiều trong hầu hết các trường hợp
Louis Maddox

1
Tôi sẽ không khuyên để sử dụng sessionInfo. Xem Lưu ý của? SessionInfo: "Thông tin về các gói và không gian tên 'được tải' là phiên bản hiện tại được cài đặt tại vị trí gói được tải từ: có thể sai nếu quy trình khác đã thay đổi gói trong phiên." Vì vậy: nếu bạn muốn biết thời tiết gói có được tải hay không, sử dụng tốt hơn "Rmpi" %in% loadedNamespaces(); nếu bạn muốn biết phiên bản nào được cài đặt ở một vị trí cụ thể, hãy sử dụng tốt hơnpackageVersion(lib.loc = ...)
RockScience

Xem câu trả lời của Gábor bên dưới để biết câu trả lời trả về phiên bản của gói hiện đang được tải (có thể khác với phiên bản trên đĩa): stackoverflow.com/a/37369263/946850
krlmlr

273

Bạn có thể sử dụng packageVersionđể xem phiên bản nào của gói được tải

> packageVersion("snow")
[1]0.3.9

Mặc dù có vẻ như bạn muốn xem phiên bản R nào bạn đang chạy, nhưng trong trường hợp đó, sessionInfođề xuất của @ Justin là cách để đi


24

Để kiểm tra phiên bản R thực thi: R --version

Hoặc sau khi bạn ở trong vỏ R in nội dung của version$version.string

BIÊN TẬP

Để kiểm tra phiên bản của các gói đã cài đặt, hãy làm như sau.

Sau khi tải thư viện, bạn có thể thực thi sessionInfo ()

Nhưng để biết danh sách tất cả các gói được cài đặt:

packinfo <- installed.packages(fields = c("Package", "Version"))
packinfo[,c("Package", "Version")]

HOẶC để trích xuất một phiên bản thư viện cụ thể, khi bạn đã trích xuất thông tin bằng cách sử dụng installed.packagehàm như trên, chỉ cần sử dụng tên của gói trong chiều thứ nhất của ma trận.

packinfo["RANN",c("Package", "Version")]
packinfo["graphics",c("Package", "Version")]

Ở trên sẽ in các phiên bản của thư viện RANN và thư viện đồ họa.


2
Câu hỏi là về phiên bản gói, không phải phiên bản R. Và nếu nhìn vào mã của tôi, tôi sử dụng version.
mpiktas

packinfo[, "Version", drop=F]thậm chí còn cho kết quả đẹp hơn (tên gói không bị trùng lặp).
Máy bay ném bom Marmite

21

Về mặt kỹ thuật, tất cả các câu trả lời tại thời điểm này đều sai. packageVersionkhông trả về phiên bản của gói đã tải. Nó đi vào đĩa và lấy phiên bản gói từ đó.

Điều này sẽ không tạo ra sự khác biệt trong hầu hết các trường hợp, nhưng đôi khi nó lại xảy ra. Theo như tôi có thể nói, cách duy nhất để có được phiên bản của gói được tải là khá hackish:

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

nơi pkglà tên gói.

EDIT: Tôi không chắc khi chức năng này được thêm vào, nhưng bạn cũng có thể sử dụng getNamespaceVersion, cái này sạch hơn:

getNamespaceVersion(pkg)

`:::`(pkg, .__NAMESPACE__.)$spec[["version"]]là một từ đồng nghĩa của asNamespace()phương pháp lấy phiên bản gói.
biển

3
Câu trả lời này rất quan trọng. packageVersion()chỉ hiển thị cho bạn kết quả hàng đầu installed.packages()nhưng nếu bạn có nhiều phiên bản của cùng một gói và bạn tải một phiên bản cụ thể, nó sẽ không cung cấp cho bạn câu trả lời đúng.
calico_

1
Per hughjonesd.shinyapps.io/rcheology nó đã có sẵn kể từ R 1.7.0.
krlmlr

20

Bạn có thể thử một cái gì đó như thế này:

  1. package_version(R.version)

  2. getRversion()


11

Giải pháp GUI:

Nếu bạn đang sử dụng RStudio thì bạn có thể kiểm tra phiên bản gói trong Packageskhung.

nhập mô tả hình ảnh ở đây


5

Sử dụng phương thức R packageDescriptionđể lấy mô tả gói đã cài đặt và đối với phiên bản, chỉ cần sử dụng $Versionnhư:

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

4

Dựa trên các câu trả lời trước đây, đây là một cách thay thế đơn giản để in phiên bản R, theo sau là tên và phiên bản của mỗi gói được tải trong không gian tên. Nó hoạt động trong máy tính xách tay Jupyter, nơi tôi gặp khó khăn khi chạy sessionInfo()R --version.

print(paste("R", getRversion()))
print("-------------")
for (package_name in sort(loadedNamespaces())) {
    print(paste(package_name, packageVersion(package_name)))
}

Ngoài:

[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

Câu hỏi cũ, nhưng không phải trong số các câu trả lời là lệnh yêu thích của tôi để có được cái nhìn tổng quan nhanh và ngắn về tất cả các gói được tải:

(.packages())

Để xem phiên bản nào được cài đặt của tất cả các gói được tải, chỉ cần sử dụng lệnh trên để tập hợp con installed.packages().

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

Bằng cách thay đổi số cột (3 cho phiên bản gói), bạn có thể nhận được bất kỳ thông tin nào khác được lưu trữ installed.packages()trong một ma trận dễ đọc. Dưới đây là một ví dụ cho số phiên bản và phụ thuộc:

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

1

Sử dụng mã sau đây để có được phiên bản của các gói R được cài đặt trong hệ thống:

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

1

Đơn giản chỉ cần sử dụng help(package="my_package")và nhìn vào phiên bản hiển thị.

Giả định này không có phiên bản gói nào khác giống nhau .libPaths.


0

Tìm kiếm () có thể đưa ra một danh sách đơn giản hơn các gói đính kèm trong một phiên (nghĩa là không có thông tin chi tiết được cung cấp bởi sessionInfo ())

tìm kiếm {cơ sở} -
Mô tả tài liệu R : Cung cấp danh sách các gói đính kèm. Tìm kiếm()

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
Có, nhưng sessionInfo cũng cung cấp số phiên bản. Trong trường hợp của tôi, cái sau thường quan trọng hơn.
mpiktas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.