¿Cómo averiguar qué versión de paquete se carga en R?

406

Estoy en un proceso de averiguar cómo usar mi clúster universitario. Tiene 2 versiones de R instaladas. Sistema R 2.11 (Debian 6.0) y R 2.14.2 en una ubicación no estándar.

Estoy tratando de usar MPI junto con 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, aparece el siguiente mensaje:

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

Entonces parece que R carga la versión de paquete de nieve compilada para R 2.11. Instalé snow bajo R 2.14 en mi carpeta de inicio y agregué 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 del error confirma que realmente estoy ejecutando R 2.14.2 y mi carpeta de paquetes R está primero en la ruta de búsqueda. Pero aún recibo el error.

Entonces, mi pregunta es ¿cómo determino qué versión del paquete se carga en R? Puedo ver con installed.packagestodos los paquetes que están instalados, ¿quizás hay alguna función que enumera información similar para los paquetes cargados?

mpiktas
fuente
1
¿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 ser incorrecto si otro proceso ha estado cambiando paquetes durante la sesión.
RockScience

Respuestas:

520

Puedes 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, según los comentarios y la respuesta a continuación, hay mejores opciones

> packageVersion("snow")

[1] '0.3.9'

O:

"Rmpi" %in% loadedNamespaces()
Justin
fuente
1
Gracias. Mi error fue generar sessionInfo antes de cargar el paquete. Al final resultó que se cargó la versión correcta del paquete, pero R todavía se quejó de la versión anterior. Instalé mi propia versión local de R y todo funcionó a las mil maravillas.
mpiktas
45
TMI! packageVersion()es mucho mejor en la mayoría de los casos
Louis Maddox
1
No recomendaría usar sessionInfo. Consulte la Nota de? SessionInfo: "La información sobre los paquetes y espacios de nombres 'cargados' 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 desea saber si el paquete está cargado o no, mejor use "Rmpi" %in% loadedNamespaces(); si desea saber qué versión está instalada en una ubicación específica, mejor usopackageVersion(lib.loc = ...)
RockScience
Consulte la respuesta de Gábor a continuación para obtener una respuesta que devuelve la versión de un paquete cargado actualmente (que puede ser diferente de la versión en disco): stackoverflow.com/a/37369263/946850
krlmlr
273

Puede usar packageVersionpara ver qué versión de un paquete se carga

> packageVersion("snow")
[1]0.3.9

Aunque parece que quiere ver qué versión de R está ejecutando, en cuyo caso la sessionInfosugerencia de @ Justin es el camino a seguir

GSee
fuente
24

Para verificar la versión de R ejecute: R --version

O después de que esté en el shell R imprima el contenido de version$version.string

EDITAR

Para verificar la versión de los paquetes instalados, haga 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 bien, para extraer una versión de biblioteca específica, una vez que haya extraído la información utilizando la installed.packagefunción anterior, 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.

foxis
fuente
2
La pregunta era sobre la versión del paquete, no sobre la versión R. Y si mira mi código, lo uso version.
mpiktas
packinfo[, "Version", drop=F]da un resultado aún más bonito (el nombre del paquete no está duplicado).
Marmite Bomber
21

Técnicamente hablando, todas las respuestas en este momento son incorrectas. packageVersionno devuelve la versión del paquete cargado. Va al disco y busca la versión del paquete desde allí.

Esto no hará una diferencia en la mayoría de los casos, pero a veces lo hace. Por lo que puedo decir, la única forma de obtener la versión de un paquete cargado es bastante hack:

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

¿Dónde pkgestá el nombre del paquete?

EDITAR: no estoy seguro de cuándo se agregó esta función, pero también puede usar getNamespaceVersion, esto es más limpio:

getNamespaceVersion(pkg)
Gabor Csardi
fuente
`:::`(pkg, .__NAMESPACE__.)$spec[["version"]]es un sinónimo del asNamespace()método para obtener la versión del paquete.
Seasmith
3
Esta respuesta es muy importante. packageVersion()solo le muestra el resultado superior, installed.packages()pero si tiene varias versiones del mismo paquete y carga una específicamente, no le dará la respuesta correcta.
calico_
1
Por hughjonesd.shinyapps.io/rcheology ha estado disponible desde tan pronto como R 1.7.0.
krlmlr
20

Puedes probar algo como esto:

  1. package_version(R.version)

  2. getRversion()

Sathish
fuente
11

Solución GUI:

Si está utilizando RStudio, puede verificar la versión del paquete en el Packagespanel.

ingrese la descripción de la imagen aquí

epo3
fuente
5

Use el método R packageDescriptionpara obtener la descripción del paquete instalado y para la versión solo use $Versioncomo:

packageDescription("AppliedPredictiveModeling")$Version
[1] "1.1-6"
Krishna Prasad
fuente
4

Según las respuestas anteriores, aquí hay una forma alternativa simple de imprimir 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 para ejecutar sessionInfo()y R --version.

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

Fuera:

[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
fuente
2

La pregunta anterior, pero no está entre las respuestas, es mi comando favorito para obtener una descripción rápida y breve de todos los paquetes cargados:

(.packages())

Para ver qué versión está instalada de todos los paquetes cargados, solo use el comando anterior para subconjuntos installed.packages().

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

Al cambiar el número de columna (3 para la versión del paquete) puede obtener cualquier otra información almacenada installed.packages()en una matriz fácil de leer. A continuación se muestra un ejemplo de número de versión y dependencia:

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

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

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

Simplemente use help(package="my_package")y mire la versión que se muestra.

Esto supone que no hay otras versiones de paquete en el mismo .libPaths.

NelsonGon
fuente
0

Search () puede proporcionar una lista más simplificada de los paquetes adjuntos en una sesión (es decir, sin la información detallada proporcionada por sessionInfo ())

search {base} - R
Descripción de la documentación : proporciona una lista de paquetes adjuntos. Buscar()

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
fuente
1
Sí, pero sessionInfo también proporciona el número de versión. En mi caso, esto último suele ser más importante.
mpiktas