2012-06-19 40 views
253

Estoy en un proceso de averiguar cómo usar mi clúster universitario. Tiene 2 versiones de R instaladas. Sistema completo R 2.11 (Debian 6.0) y R 2.14.2 en una ubicación no estándar.¿Cómo saber qué versión del paquete se carga en R?

Estoy tratando de usar MPI junto con la nieve. El código que intento ejecutar es el siguiente

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

Funciona sin problemas en R 2.11. (Lanzo el script con mpirun -H localhost,n1,n2,n3,n4 -n 1 R --slave -f code.R). Ahora cuando trato de hacerlo con R 2.14.2, me sale el siguiente mensaje:

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

lo que parece que R carga la versión compilada para la nieve paquete R 2.11. He instalado nieve bajo R 2.14 en mi carpeta de inicio y he añadido las siguientes líneas a mi código:

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

Y la salida antes de que el error confirma que de hecho estoy corriendo R 2.14.2 y mi carpeta Paquetes de R es el primero en la ruta de búsqueda. Pero todavía obtengo el error.

Entonces mi pregunta es ¿cómo puedo determinar qué versión del paquete se carga en R? Puedo ver con installed.packages todos los paquetes que están instalados, por lo que tal vez haya alguna función que enumere información similar para los paquetes cargados.

+0

¿Encontró una buena solución para este problema? En mi experiencia y como indica la ayuda de R, tanto sessionInfo como packageVersion devuelven _ la versión actual instalada en la ubicación desde la que se cargó el paquete: puede estar mal si otro proceso ha estado cambiando paquetes durante la sesión._ – RockScience

Respuesta

317

Puede usar sessionInfo() para lograr eso.

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

Sin embargo, de acuerdo con los comentarios y la respuesta de abajo, hay mejores opciones

> packageVersion("snow") 

[1] '0.3.9'

O:

"Rmpi" %in% loadedNamespaces() 
+0

Gracias. Mi error fue dar salida a sessionInfo antes de la carga del paquete. Al final resultó que se cargó la versión correcta del paquete, pero R todavía se quejaba de la versión anterior. Instalé mi propia versión local de R y todo funcionó como un amuleto. – mpiktas

+23

TMI! 'packageVersion()' es mucho mejor en la mayoría de los casos –

+0

No aconsejaría usar 'sessionInfo'. Consulte la Nota de? SessionInfo: _ "La información sobre paquetes 'cargados' y espacios de nombres es la versión actual instalada en la ubicación desde la que se cargó el paquete: puede ser incorrecto si otro proceso ha estado cambiando paquetes durante la sesión." _ Entonces: si quiere saber si el paquete está cargado o no, mejor use '" Rmpi ​​"% en% loadedNamespaces()'; si quiere saber qué versión está instalada en una ubicación específica, mejor use 'packageVersion (lib.loc = ...)' – RockScience

17

Para Verifique la versión de R ejecutar: R --version

o después de que se encuentra en la cáscara R imprimir el contenido de version$version.string

EDITAR

Para comprobar la versión de los paquetes instalados hacer lo siguiente.

Después de cargar la biblioteca, puede ejecutar sessionInfo()

Pero para conocer la lista de todos los paquetes instalados:

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

O para extraer una versión específica de la biblioteca, una vez que se ha extraído la información usando el installed.package funcionan como arriba simplemente use el nombre del paquete en la primera dimensión de la matriz.

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

Lo anterior imprimirá las versiones de la biblioteca RANN y la biblioteca de gráficos.

+2

La pregunta era sobre la versión del paquete, no la versión R. Y si miras mi código, uso 'version'. – mpiktas

+0

@mpiktas Lo siento, lo malinterpreté. Eche un vistazo a la edición. – phoxis

215

Puede utilizar packageVersion para ver qué versión de un paquete se carga

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

Aunque suena como usted quiere ver qué versión de R está ejecutando, en cuyo caso @sessionInfo sugerencia de Justin es el camino ir

19

Usted puede intentar algo como esto:

  1. package_version(R.version)

  2. getRversion()

+0

Está bien, lo resolvió gracias. – rnorouzian

1

Utilice el código siguiente para obtener la versión de R paquetes instalados en el sistema:

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

Basado en las respuestas anteriores, aquí es una forma alternativa simple de la impresión la versión R, seguida del nombre y la versión de cada paquete cargado en el espacio de nombres. Funciona en el cuaderno Jupyter, donde tuve problemas al ejecutar sessionInfo() y R --version.

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

de salida:

[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

uso del método R packageDescription para obtener la descripción del paquete instalado y para la versión sólo tiene que utilizar $Version como:

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

Técnicamente hablando, todas las respuestas a las esta vez están equivocados packageVersion no devuelve la versión del paquete cargado. Va al disco y busca la versión del paquete desde allí.

Esto no hará la diferencia en la mayoría de los casos, pero a veces lo hace. Por lo que yo puedo decir, la única manera de conseguir la versión de un paquete cargado es el lugar hacker:

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

donde pkg es el nombre del paquete.

EDIT: No estoy seguro de cuando se añadió esta función, pero también se puede utilizar getNamespaceVersion, esto es más limpio:

getNamespaceVersion(pkg) 
+0

'\' ::: \ '(pkg, .__ NAMESPACE __.) $ Spec [[" version "]]' es un sinónimo del método 'asNamespace()' para obtener la versión del paquete. – seasmith

+1

Esta respuesta es muy importante. 'packageVersion()' solo muestra el resultado principal en 'installed.packages()', pero si tiene varias versiones del mismo paquete y carga uno específicamente, no le dará la respuesta correcta. –

8

solución de interfaz gráfica de usuario:

Si está utilizando rstudio entonces puede verificar la versión del paquete en el panel Packages.

enter image description here

0

Buscar() puede dar una lista más simplificada de los paquetes unidos en una sesión (es decir, sin la información detallada que se da por sessionInfo())

búsqueda {de base} - R Documentación
Descripción: Ofrece una lista de paquetes adjuntos.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í, pero sessionInfo también proporciona el número de versión. En mi caso, este último suele ser más importante. – mpiktas

Cuestiones relacionadas