2012-06-19 6 views
253

Sono in procinto di capire come utilizzare il mio cluster universitario. Ha 2 versioni di R installate. System wide R 2.11 (Debian 6.0) e R 2.14.2 in posizione non standard.Come scoprire quale versione del pacchetto è stata caricata in R?

Sto cercando di utilizzare MPI insieme alla neve. Il codice che sto cercando di eseguire è la seguente

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

Funziona senza problemi su R 2.11. (Lancio la sceneggiatura con mpirun -H localhost,n1,n2,n3,n4 -n 1 R --slave -f code.R). Ora, quando provo a farlo con R 2.14.2, ricevo il seguente messaggio:

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

così sembra che R carica la versione del pacchetto neve compilato per R 2.11. Ho installato neve sotto R 2.14 nella mia cartella home e ho aggiunto le seguenti righe al mio codice:

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

E l'uscita prima che l'errore conferma che sono davvero in esecuzione R 2.14.2 e la mia cartella di pacchetti R è il primo nel percorso di ricerca. Ma ho ancora l'errore.

Quindi la mia domanda è: come determinare quale versione del pacchetto viene caricata in R? Posso vedere con installed.packages tutti i pacchetti che sono installati, quindi forse c'è qualche funzione che elenca le informazioni simili per i pacchetti caricati?

+0

hai trovato una buona soluzione per questo problema? Nella mia esperienza e come indica la guida R, sia sessionInfo che packageVersion restituiscono _ la versione corrente installata nel percorso dal quale è stato caricato il pacchetto: può essere sbagliato se un altro processo ha modificato i pacchetti durante la sessione. – RockScience

risposta

317

È possibile utilizzare sessionInfo() per ottenere ciò.

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

Tuttavia, come per i commenti e la risposta qui sotto, ci sono opzioni migliori

> packageVersion("snow") 

[1] '0.3.9'

O:

"Rmpi" %in% loadedNamespaces() 
+0

Grazie. Il mio errore è stato l'output di sessionInfo prima del caricamento del pacchetto. Alla fine si è scoperto che era stata caricata la versione corretta del pacchetto, ma R si lamentava ancora della vecchia versione. Ho installato la mia versione locale di R e tutto ha funzionato come un fascino. – mpiktas

+23

TMI! 'packageVersion()' è molto meglio nella maggior parte dei casi –

+0

Non consiglierei di usare 'sessionInfo'. Vedere la nota di? SessionInfo: _ "Le informazioni sui pacchetti e spazi dei nomi 'caricati' sono la versione corrente installata nel percorso dal quale è stato caricato il pacchetto: può essere sbagliato se un altro processo ha cambiato pacchetti durante la sessione." _ Quindi: se vuoi sapere se il pacchetto è caricato o no, meglio usare '" Rmpi ​​"% in% loadedNamespaces()'; se vuoi sapere quale versione è installata in una posizione specifica, usa meglio 'packageVersion (lib.loc = ...)' – RockScience

17

Per controllare la versione di R esecuzione: R --version

O dopo sei nella shell R stampare il contenuto di version$version.string

EDIT

Per verificare la versione dei pacchetti installati effettuare le seguenti operazioni.

Dopo il caricamento della libreria, è possibile eseguire sessionInfo()

Ma per conoscere l'elenco di tutti i pacchetti installati:

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

O per estrarre una versione specifica libreria, una volta che avete estratto le informazioni utilizzando il Funzione installed.package come sopra, basta usare il nome del pacchetto nella prima dimensione della matrice.

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

È possibile che stamperà le versioni della libreria RANN e la libreria grafica.

+2

La domanda riguardava la versione del pacchetto, non la versione R. E se guardi il mio codice, io uso 'version'. – mpiktas

+0

@mpiktas Spiacente, ho male interpretato. Dai un'occhiata alla modifica. – phoxis

215

È possibile utilizzare packageVersion per vedere quale versione di un pacchetto viene caricato

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

Anche se suona come si vuole vedere quale versione di R è in esecuzione, nel qual caso @sessionInfo suggerimento di Justin è il modo andare

19

Si può provare qualcosa di simile:

  1. package_version(R.version)

  2. getRversion()

+0

Va bene, risolto grazie. – rnorouzian

1

Utilizzare il seguente codice per ottenere la versione di pacchetti R installati nel sistema:

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

Sulla base delle risposte precedenti, ecco un modo semplice alternativa di stampa la versione R, seguita dal nome e dalla versione di ogni pacchetto caricato nello spazio dei nomi. Funziona nel taccuino Jupyter, dove ho avuto problemi con sessionInfo() e R --version.

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

Out:

[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

Utilizzare il metodo R packageDescription per ottenere la descrizione del pacchetto installato e per la versione basta usare $Version come:

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

Tecnicamente parlando, tutte le risposte a questa volta sono sbagliati. packageVersion non restituisce la versione del pacchetto caricato. Va sul disco e recupera la versione del pacchetto da lì.

Questo non farà la differenza nella maggior parte dei casi, ma a volte lo fa. Per quanto posso dire, l'unico modo per ottenere la versione di un pacchetto caricato è piuttosto hacker:

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

dove pkg è il nome del pacchetto.

EDIT: Non sono sicuro di quando è stato aggiunto questa funzione, ma è anche possibile utilizzare getNamespaceVersion, questo è più pulita:

getNamespaceVersion(pkg) 
+0

'\' ::: \ '(pkg, .__ NAMESPACE __.) $ Spec [[" versione "]]' è un sinonimo del metodo 'asNamespace()' per ottenere la versione del pacchetto. – seasmith

+1

Questa risposta è così importante. 'packageVersion()' mostra solo il risultato principale in 'installed.packages()' ma se si ha una versione multipla dello stesso pacchetto e ne si carica uno in particolare, non si otterrà la risposta corretta. –

8

soluzione GUI:

Se si utilizza RStudio allora si può controllare la versione del pacchetto nel riquadro Packages.

enter image description here

0

Search() può dare una lista più semplificata dei pacchetti allegati in una sessione (cioè senza le informazioni dettagliate data dal sessionInfo())

ricerca {di base} - R Documentazione
Descrizione: fornisce un elenco di pacchetti allegati.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

Sì, ma sessionInfo fornisce anche il numero di versione. Nel mio caso, quest'ultimo è solitamente più importante. – mpiktas