571 votes

Comment savoir quelle version du paquet est chargée dans R ?

Je suis en train de comprendre comment utiliser mon cluster universitaire. Deux versions de R sont installées. La version 2.11 du système (Debian 6.0) et la version 2.14.2 dans un emplacement non standard.

J'essaie d'utiliser MPI avec snow. 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()

Il 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, lorsque j'essaie de le faire avec R 2.14.2, j'obtiens 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 du paquet snow 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'utilise bien R 2.14.2 et que mon dossier de paquets R est le premier dans le chemin de recherche. Mais je reçois toujours l'erreur.

Ma question est donc la suivante : comment puis-je déterminer quelle version du paquet est chargée dans R ? Je peux voir avec installed.packages tous les paquets qui sont installés, alors peut-être existe-t-il une fonction qui liste des informations similaires pour les paquets chargés ?

2 votes

Avez-vous trouvé une bonne solution à ce problème ? D'après mon expérience, et comme l'indique l'aide de R, sessionInfo et packageVersion renvoient tous deux la variable la version actuelle installée à l'endroit d'où le paquet a été chargé : elle peut être erronée si un autre processus a changé de paquet pendant la session.

741voto

Justin Points 19077

Vous pouvez utiliser sessionInfo() pour y parvenir.

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

1 votes

Merci. Mon erreur a été de sortir sessionInfo avant le chargement du paquet. Au final, il s'est avéré que la bonne version du paquet a été 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 sur des roulettes.

79 votes

TMI ! packageVersion() est bien meilleur dans la plupart des cas

1 votes

Je ne conseillerais pas d'utiliser sessionInfo . Voir la note de ?sessionInfo : "Les informations sur les paquets et les espaces de noms 'chargés' sont la version actuelle installée à l'emplacement à partir duquel le paquet a été chargé : elles peuvent être erronées si un autre processus a changé de paquet pendant la session." Donc : si vous voulez savoir si le paquet est chargé ou non, il vaut mieux utiliser "Rmpi" %in% loadedNamespaces() ; si vous voulez savoir quelle version est installée à un endroit précis, il vaut mieux utiliser packageVersion(lib.loc = ...)

365voto

GSee Points 19079

Vous pouvez utiliser packageVersion pour voir quelle version d'un paquet est chargée

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

Bien qu'il semble que vous souhaitiez connaître la version de R que vous utilisez, dans ce cas, l'outil de @Justin sessionInfo la suggestion est la voie à suivre

0 votes

Cette réponse est clairement gagnante pour moi car vous pouvez l'utiliser pour rédiger des conditions soignées. Voir ma réponse ci-dessous pour un exemple.

45voto

Gabor Csardi Points 5749

Techniquement parlant, toutes les réponses à ce jour sont fausses. packageVersion ne renvoie pas la version du paquet chargé. Elle va sur le disque et y récupère la version du paquet.

Cela ne fera pas de différence dans la plupart des cas, mais parfois cela en fait une. Pour autant que je sache, la seule façon d'obtenir la version d'un fichier chargé Le paquet est plutôt pirate :

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

pkg est le nom du paquet.

EDIT : Je ne suis pas sûr quand cette fonction a été ajoutée, mais vous pouvez aussi utiliser getNamespaceVersion c'est plus propre :

getNamespaceVersion(pkg)

1 votes

`:::`(pkg, .__NAMESPACE__.)$spec[["version"]] est un synonyme de la asNamespace() pour obtenir la version du paquet.

3 votes

Cette réponse est si importante. packageVersion() ne vous montre que le premier résultat dans installed.packages() mais si vous avez plusieurs versions du même paquet, et que vous en chargez une spécifiquement, il ne vous donnera pas la bonne réponse.

1 votes

Par hughjonesd.shinyapps.io/rcheology il est disponible depuis la version R 1.7.0.

25voto

phoxis Points 14005

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

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

EDIT

Pour vérifier la version des paquets 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 paquets installés :

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

OU pour extraire une version spécifique de la bibliothèque, une fois que vous avez extrait les informations à l'aide de la fonction installed.package comme ci-dessus, utilisez simplement le nom du paquet 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.

3 votes

La question portait sur la version du paquet, pas sur la version de R. Et si vous regardez mon code, j'utilise version .

0 votes

packinfo[, "Version", drop=F] donne encore plus joli résultat (le nom du paquet n'est pas dupliqué).

21voto

Sathish Points 462

Vous pouvez essayer quelque chose comme ça :

  1. package_version(R.version)

  2. getRversion()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X