Wie finde ich heraus, welche Paketversion in R geladen ist?

405

Ich bin gerade dabei herauszufinden, wie ich meinen Universitätscluster nutzen soll. Es sind 2 Versionen von R installiert. Systemweit R 2.11 (Debian 6.0) und R 2.14.2 an nicht standardmäßigen Standorten.

Ich versuche, MPI zusammen mit Schnee zu verwenden. Der Code, den ich ausführen möchte, ist der folgende

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

Es funktioniert ohne die Probleme auf R 2.11. (Ich starte das Skript mit mpirun -H localhost,n1,n2,n3,n4 -n 1 R --slave -f code.R). Wenn ich jetzt versuche, es mit R 2.14.2 zu tun, erhalte ich die folgende Meldung:

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

Es scheint also, dass R die für R 2.11 kompilierte Paket-Schneeversion lädt. Ich habe Schnee unter R 2.14 in meinem Home-Ordner installiert und meinem Code die folgenden Zeilen hinzugefügt:

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

Die Ausgabe vor dem Fehler bestätigt, dass ich tatsächlich R 2.14.2 ausführe und mein R-Paketordner sich zuerst im Suchpfad befindet. Aber ich bekomme immer noch den Fehler.

Meine Frage ist also, wie ich feststelle, welche Version des Pakets in R geladen ist. Ich kann mit installed.packagesallen installierten Paketen sehen, also gibt es vielleicht eine Funktion, die ähnliche Informationen für geladene Pakete auflistet?

mpiktas
quelle
1
Haben Sie eine gute Lösung für dieses Problem gefunden? Nach meiner Erfahrung und wie aus der R-Hilfe hervorgeht, geben sessionInfo und packageVersion die aktuelle Version zurück, die an dem Speicherort installiert wurde, von dem das Paket geladen wurde: Es kann falsch sein, wenn ein anderer Prozess während der Sitzung Pakete
RockScience

Antworten:

519

Sie können verwenden, sessionInfo()um dies zu erreichen.

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

Gemäß den Kommentaren und der Antwort unten gibt es jedoch bessere Optionen

> packageVersion("snow")

[1] "0.3.9"

Oder:

"Rmpi" %in% loadedNamespaces()
Justin
quelle
1
Vielen Dank. Mein Fehler war, sessionInfo vor dem Laden des Pakets auszugeben. Am Ende stellte sich heraus, dass die richtige Version des Pakets geladen wurde, aber R beschwerte sich immer noch über die alte Version. Installierte meine eigene lokale Version von R und alles funktionierte wie ein Zauber.
mpiktas
45
TMI! packageVersion()ist in den meisten Fällen viel besser
Louis Maddox
1
Ich würde nicht raten zu verwenden sessionInfo. Siehe den Hinweis von? SessionInfo: "Die Informationen zu 'geladenen' Paketen und Namespaces sind die aktuelle Version, die an dem Speicherort installiert wurde, von dem das Paket geladen wurde: Es kann falsch sein, wenn ein anderer Prozess während der Sitzung Pakete geändert hat." Also: Wenn Sie wissen möchten, ob das Paket geladen ist oder nicht, verwenden Sie es besser "Rmpi" %in% loadedNamespaces(). Wenn Sie wissen möchten, welche Version an einem bestimmten Ort installiert ist, verwenden Sie besserpackageVersion(lib.loc = ...)
RockScience
In Gábors Antwort unten finden Sie eine Antwort, die die Version eines aktuell geladenen Pakets zurückgibt (die sich möglicherweise von der On-Disk-Version unterscheidet): stackoverflow.com/a/37369263/946850
krlmlr
273

Sie können verwenden, um packageVersionzu sehen, welche Version eines Pakets geladen ist

> packageVersion("snow")
[1]0.3.9

Obwohl es so klingt, als ob Sie sehen möchten, welche Version von R Sie ausführen, ist in diesem Fall der sessionInfoVorschlag von @ Justin der richtige Weg

GSee
quelle
24

So überprüfen Sie die Version von R: R --version

Oder drucken Sie den Inhalt von, nachdem Sie sich in der R-Shell befinden version$version.string

BEARBEITEN

Gehen Sie wie folgt vor, um die Version der installierten Pakete zu überprüfen.

Nach dem Laden der Bibliothek können Sie ausführen sessionInfo ()

Aber um die Liste aller installierten Pakete zu kennen:

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

ODER Um eine bestimmte Bibliotheksversion zu extrahieren, verwenden Sie nach dem Extrahieren der Informationen mit der oben beschriebenen installed.packageFunktion einfach den Namen des Pakets in der ersten Dimension der Matrix.

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

Oben werden die Versionen der RANN-Bibliothek und der Grafikbibliothek gedruckt.

Phoxis
quelle
2
Die Frage betraf die Paketversion, nicht die R-Version. Und wenn ich mir meinen Code ansehe, benutze ich version.
mpiktas
packinfo[, "Version", drop=F]gibt noch schönere Ergebnisse (Paketname wird nicht dupliziert).
Marmite Bomber
21

Technisch gesehen sind alle Antworten zu diesem Zeitpunkt falsch. packageVersiongibt die Version des geladenen Pakets nicht zurück. Es geht auf die Festplatte und ruft von dort die Paketversion ab.

Dies macht in den meisten Fällen keinen Unterschied, aber manchmal schon. Soweit ich das beurteilen kann, ist der einzige Weg, um die Version eines geladenen Pakets zu erhalten, der ziemlich hackige:

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

Wo pkgist der Paketname?

EDIT: Ich bin nicht sicher, wann diese Funktion hinzugefügt wurde, aber Sie können auch verwenden getNamespaceVersion, dies ist sauberer:

getNamespaceVersion(pkg)
Gabor Csardi
quelle
`:::`(pkg, .__NAMESPACE__.)$spec[["version"]]ist ein Synonym für die asNamespace()Methode zum Abrufen der Paketversion.
Seeschmied
3
Diese Antwort ist so wichtig. packageVersion()zeigt Ihnen nur das beste Ergebnis in, installed.packages()aber wenn Sie mehrere Versionen desselben Pakets haben und eine speziell laden, erhalten Sie nicht die richtige Antwort.
calico_
1
Per hughjonesd.shinyapps.io/rcheology ist es bereits seit R 1.7.0 verfügbar.
krlmlr
20

Sie können so etwas ausprobieren:

  1. package_version(R.version)

  2. getRversion()

Sathish
quelle
11

GUI-Lösung:

Wenn Sie RStudio verwenden, können Sie die Paketversion im Bereich überprüfen Packages.

Geben Sie hier die Bildbeschreibung ein

epo3
quelle
5

Verwenden Sie die R-Methode packageDescription, um die installierte Paketbeschreibung abzurufen, und verwenden Sie für die Version einfach Folgendes $Version:

packageDescription("AppliedPredictiveModeling")$Version
[1] "1.1-6"
krishna Prasad
quelle
4

Basierend auf den vorherigen Antworten finden Sie hier eine einfache alternative Möglichkeit, die R-Version zu drucken, gefolgt vom Namen und der Version jedes im Namespace geladenen Pakets. Es funktioniert im Jupyter-Notizbuch, wo ich Probleme beim Laufen hatte sessionInfo()und R --version.

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

Aus:

[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"
joelostblom
quelle
2

Alte Frage, aber nicht unter den Antworten, ist mein Lieblingsbefehl, um einen schnellen und kurzen Überblick über alle geladenen Pakete zu erhalten:

(.packages())

Um zu sehen, welche Version aller geladenen Pakete installiert ist, verwenden Sie einfach den obigen Befehl, um eine Teilmenge zu erstellen installed.packages().

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

Durch Ändern der Spaltennummer (3 für Paketversion) können Sie alle anderen Informationen installed.packages()in einer einfach zu lesenden Matrix speichern . Unten finden Sie ein Beispiel für Versionsnummer und Abhängigkeit:

installed.packages()[(.packages()),c(3,5)]
TimTeaFan
quelle
1

Verwenden Sie den folgenden Code, um die Version der im System installierten R-Pakete abzurufen:

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

Verwenden Sie einfach help(package="my_package")die gezeigte Version und sehen Sie sie sich an.

Dies setzt voraus, dass es keine anderen Paketversionen in derselben gibt .libPaths.

NelsonGon
quelle
0

Search () kann eine vereinfachte Liste der angehängten Pakete in einer Sitzung enthalten (dh ohne die detaillierten Informationen von sessionInfo ()).

search {base} - R Dokumentation
Beschreibung: Gibt eine Liste der angehängten Pakete an. Suche()

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"
Maria Wollestonecraft
quelle
1
Ja, aber sessionInfo gibt auch die Versionsnummer an. In meinem Fall ist letzteres normalerweise wichtiger.
mpiktas