Comment savoir quelle version de package est chargée dans R?

406

Je suis en train de comprendre comment utiliser mon cluster universitaire. Il a 2 versions de R installées. R 2.11 (Debian 6.0) et R 2.14.2 à l'échelle du système dans un emplacement non standard.

J'essaie d'utiliser MPI avec de la neige. Le code que j'essaie d'exécuter est le suivant

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

Cela fonctionne sans les problèmes sur R 2.11. (Je lance le script avec mpirun -H localhost,n1,n2,n3,n4 -n 1 R --slave -f code.R). Maintenant, quand j'essaie de le faire avec R 2.14.2, je reçois le message suivant:

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

Il semble donc que R charge la version snow du package compilée pour R 2.11. J'ai installé snow sous R 2.14 dans mon dossier personnel et j'ai ajouté les lignes suivantes à mon code:

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

Et la sortie avant l'erreur confirme que j'exécute bien R 2.14.2 et mon dossier de packages R est d'abord dans le chemin de recherche. Mais je reçois toujours l'erreur.

Ma question est donc de savoir comment déterminer la version du package chargée dans R? Je peux voir avec installed.packagestous les packages installés, alors peut-être qu'il y a une fonction qui répertorie des informations similaires pour les packages chargés?

mpiktas
la source
1
avez-vous trouvé une bonne solution à ce problème? D'après mon expérience et comme l'indique l'aide R, sessionInfo et packageVersion renvoient la version actuelle installée à l'emplacement
RockScience

Réponses:

520

Vous pouvez utiliser sessionInfo()pour accomplir cela.

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

Cependant, selon les commentaires et la réponse ci-dessous, il existe de meilleures options

> packageVersion("snow")

[1] «0,3,9»

Ou:

"Rmpi" %in% loadedNamespaces()
Justin
la source
1
Merci. Mon erreur a été de sortir sessionInfo avant le chargement du paquet. À la fin, il s'est avéré que la bonne version du paquet était chargée, mais R se plaignait toujours de l'ancienne version. J'ai installé ma propre version locale de R et tout a fonctionné comme un charme.
mpiktas
45
TMI! packageVersion()est beaucoup mieux dans la plupart des cas
Louis Maddox
1
Je ne conseillerais pas d'utiliser sessionInfo. Voir la note de? SessionInfo: "Les informations sur les packages et les espaces de noms 'chargés' sont la version actuelle installée à l'emplacement à partir duquel le package a été chargé: cela peut être faux si un autre processus a changé les packages pendant la session." Donc: si vous voulez savoir si le paquet est chargé ou non, mieux vaut l'utiliser "Rmpi" %in% loadedNamespaces(); si vous voulez savoir quelle version est installée dans un emplacement spécifique, mieux vaut l'utiliserpackageVersion(lib.loc = ...)
RockScience
Voir la réponse de Gábor ci-dessous pour une réponse qui renvoie la version d'un package actuellement chargé (qui peut être différente de la version sur disque): stackoverflow.com/a/37369263/946850
krlmlr
273

Vous pouvez utiliser packageVersionpour voir quelle version d'un package est chargée

> packageVersion("snow")
[1]0.3.9

Bien qu'il semble que vous souhaitiez voir la version de R que vous utilisez, auquel cas la sessionInfosuggestion de @ Justin est la voie à suivre

GSee
la source
24

Pour vérifier la version de R, exécutez: R --version

Ou une fois que vous êtes dans le shell R, imprimez le contenu de version$version.string

ÉDITER

Pour vérifier la version des packages installés, procédez comme suit.

Après avoir chargé la bibliothèque, vous pouvez exécuter sessionInfo ()

Mais pour connaître la liste de tous les packages installés:

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

OU pour extraire une version de bibliothèque spécifique, une fois que vous avez extrait les informations à l'aide de la installed.packagefonction ci-dessus, utilisez simplement le nom du package dans la première dimension de la matrice.

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

Ce qui précède imprimera les versions de la bibliothèque RANN et de la bibliothèque graphique.

phoxis
la source
2
La question concernait la version du package, pas la version R. Et si vous regardez mon code, j'utilise version.
mpiktas
packinfo[, "Version", drop=F]donne un résultat encore plus joli (le nom du package n'est pas dupliqué).
Marmite Bomber
21

Techniquement parlant, toutes les réponses en ce moment sont fausses. packageVersionne renvoie pas la version du package chargé. Il va sur le disque et récupère la version du package à partir de là.

Cela ne fera pas de différence dans la plupart des cas, mais parfois c'est le cas. Pour autant que je sache, le seul moyen d'obtenir la version d'un paquet chargé est le plutôt hackish:

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

pkgest le nom du package.

EDIT: Je ne sais pas quand cette fonction a été ajoutée, mais vous pouvez également l'utiliser getNamespaceVersion, c'est plus propre:

getNamespaceVersion(pkg)
Gabor Csardi
la source
`:::`(pkg, .__NAMESPACE__.)$spec[["version"]]est un synonyme de la asNamespace()méthode d'obtention de la version du package.
seasmith
3
Cette réponse est si importante. packageVersion()ne vous montre que le meilleur résultat, installed.packages()mais si vous avez plusieurs versions du même package et que vous en chargez une spécifiquement, cela ne vous donnera pas la bonne réponse.
calico_
1
Par hughjonesd.shinyapps.io/rcheology, il est disponible depuis sa disponibilité dès R 1.7.0.
krlmlr
20

Vous pouvez essayer quelque chose comme ceci:

  1. package_version(R.version)

  2. getRversion()

Sathish
la source
11

Solution GUI:

Si vous utilisez RStudio, vous pouvez vérifier la version du package dans le Packagesvolet.

entrez la description de l'image ici

epo3
la source
5

Utilisez la méthode R packageDescriptionpour obtenir la description du package installé et pour la version, utilisez simplement $Version:

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

Sur la base des réponses précédentes, voici une manière alternative simple d'imprimer la version R, suivie du nom et de la version de chaque paquet chargé dans l'espace de noms. Cela fonctionne dans le cahier Jupyter, où j'ai eu des problèmes de fonctionnement sessionInfo()et R --version.

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

En dehors:

[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
la source
2

Ancienne question, mais pas parmi les réponses est ma commande préférée pour obtenir un aperçu rapide et bref de tous les packages chargés:

(.packages())

Pour voir quelle version est installée de tous les packages chargés, utilisez simplement la commande ci-dessus pour sous-ensemble installed.packages().

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

En modifiant le numéro de colonne (3 pour la version du package), vous pouvez obtenir toute autre information stockée installed.packages()dans une matrice facile à lire. Voici un exemple de numéro de version et de dépendance:

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

Utilisez le code suivant pour obtenir la version des packages R installés sur le système:

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

Utilisez simplement help(package="my_package")et regardez la version indiquée.

Cela suppose qu'il n'y a pas d'autres versions de package dans le même .libPaths.

NelsonGon
la source
0

Search () peut donner une liste plus simplifiée des packages joints dans une session (c'est-à-dire sans les informations détaillées fournies par sessionInfo ())

search {base} - R Documentation
Description: Donne une liste des packages joints. Chercher()

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
la source
1
Oui, mais sessionInfo donne également le numéro de version. Dans mon cas, ce dernier est généralement plus important.
mpiktas