จะค้นหาเวอร์ชั่นแพ็คเกจที่โหลดใน R ได้อย่างไร?


405

ฉันกำลังหาวิธีใช้กลุ่มมหาวิทยาลัยของฉัน มีการติดตั้ง R 2 เวอร์ชัน ความกว้างของระบบ 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 จะโหลดเวอร์ชั่น snow package ที่รวบรวมสำหรับ 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)

และผลลัพธ์ก่อนที่ข้อผิดพลาดจะยืนยันว่าฉันกำลังรัน R 2.14.2 จริง ๆ และโฟลเดอร์แพ็กเกจ R ของฉันนั้นเป็นเส้นทางแรกในการค้นหา แต่ฉันยังคงได้รับข้อผิดพลาด

ดังนั้นคำถามของฉันคือฉันจะทราบได้อย่างไรว่าแพ็คเกจรุ่นใดที่โหลดใน R ฉันสามารถดู installed.packagesแพ็คเกจทั้งหมดที่ติดตั้งได้ดังนั้นอาจมีฟังก์ชั่นบางอย่างที่แสดงรายการข้อมูลที่คล้ายกันสำหรับแพ็คเกจที่โหลด


1
คุณพบทางออกที่ดีสำหรับปัญหานี้หรือไม่? ในประสบการณ์ของฉันและตามที่ระบุความช่วยเหลือ R ทั้ง sessionInfo และ packageVersion ส่งคืนเวอร์ชันปัจจุบันที่ติดตั้ง ณ ตำแหน่งที่แพ็กเกจถูกโหลดจาก: อาจผิดถ้ากระบวนการอื่นเปลี่ยนแพคเกจระหว่างเซสชัน
RockScience

คำตอบ:


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

45
TMI! packageVersion()จะดีกว่ามากในกรณีส่วนใหญ่
Louis Maddox

1
sessionInfoฉันจะไม่แนะนำให้ใช้ ดูหมายเหตุของ? sessionInfo: "ข้อมูลเกี่ยวกับแพคเกจ 'โหลด' และเนมสเปซคือเวอร์ชันปัจจุบันที่ติดตั้ง ณ ตำแหน่งที่โหลดแพคเกจจาก: อาจผิดถ้ากระบวนการอื่นกำลังเปลี่ยนแพ็คเกจระหว่างเซสชัน"ดังนั้นถ้าคุณต้องการรู้ว่าแพ็คเกจโหลดหรือไม่ควรใช้ให้ดีกว่า"Rmpi" %in% loadedNamespaces(); หากคุณต้องการทราบว่ามีการติดตั้งเวอร์ชันใดในตำแหน่งเฉพาะให้ใช้งานได้ดีขึ้นpackageVersion(lib.loc = ...)
RockScience

ดูคำตอบของGáborด้านล่างสำหรับคำตอบที่ส่งคืนเวอร์ชันของแพ็กเกจที่โหลดในปัจจุบัน (ซึ่งอาจแตกต่างจากเวอร์ชั่นบนดิสก์): stackoverflow.com/a/37369263/946850
krlmlr

273

คุณสามารถใช้packageVersionเพื่อดูเวอร์ชันของแพ็คเกจที่โหลด

> packageVersion("snow")
[1]0.3.9

แม้ว่ามันจะดูเหมือนว่าคุณต้องการที่จะเห็นรุ่นของ R ที่คุณกำลังทำงานอยู่ซึ่งในกรณีที่sessionInfoคำแนะนำของ @ Justin เป็นวิธีที่จะไป


24

วิธีตรวจสอบเวอร์ชั่นของ R execute: 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 versionและถ้าดูที่รหัสของฉันฉันใช้
mpiktas

packinfo[, "Version", drop=F]ให้มากยิ่งขึ้นสวยผล (ชื่อแพคเกจจะไม่ซ้ำกัน)
เครื่องบินทิ้งระเบิด Marmite

21

เทคนิคการพูดคำตอบทั้งหมดในเวลานี้ผิด packageVersionไม่ส่งคืนเวอร์ชันของแพ็กเกจที่โหลด มันจะไปที่ดิสก์และดึงข้อมูลเวอร์ชันแพ็คเกจจากที่นั่น

สิ่งนี้จะไม่สร้างความแตกต่างในกรณีส่วนใหญ่ แต่บางครั้งก็เป็นเช่นนั้น เท่าที่ฉันสามารถบอกได้วิธีเดียวที่จะได้รับเวอร์ชันของแพ็กเกจที่โหลดมานั้นค่อนข้างแฮ็ค:

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

ที่ไหน pkgเป็นชื่อแพคเกจ

แก้ไข: ฉันไม่แน่ใจว่าเมื่อมีการเพิ่มฟังก์ชั่นนี้ แต่คุณยังสามารถใช้getNamespaceVersionนี่คือสะอาด:

getNamespaceVersion(pkg)

`:::`(pkg, .__NAMESPACE__.)$spec[["version"]]เป็นคำพ้องความหมายของasNamespace()วิธีการรับรุ่นแพ็คเกจ
seasmith

3
คำตอบนี้สำคัญมาก packageVersion()แสดงเฉพาะผลลัพธ์ที่ดีที่สุดinstalled.packages()เท่านั้นหากคุณมีแพ็คเกจรุ่นเดียวกันหลายเวอร์ชันและโหลดโดยเฉพาะแพคเกจนั้นจะไม่ให้คำตอบที่ถูกต้อง
calico_

1
ต่อhughjonesd.shinyapps.io/rcheologyมีให้บริการตั้งแต่ช่วงต้น R 1.7.0
krlmlr


11

โซลูชัน GUI:

หากคุณใช้ RStudio คุณสามารถตรวจสอบเวอร์ชั่นแพ็คเกจได้ในPackagesบานหน้าต่าง

ป้อนคำอธิบายรูปภาพที่นี่


5

ใช้วิธี R packageDescriptionเพื่อรับรายละเอียดแพ็คเกจที่ติดตั้งและสำหรับเวอร์ชันใช้$Versionเป็น:

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

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

ค้นหา () สามารถให้รายการที่ง่ายขึ้นของแพคเกจที่แนบมาในเซสชั่น (เช่นโดยไม่มีข้อมูลรายละเอียดที่กำหนดโดย sessionInfo ())

search {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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.