Jak dowiedzieć się, która wersja pakietu jest ładowana w R?


405

Właśnie zastanawiam się, jak korzystać z mojego klastra uniwersyteckiego. Ma zainstalowane 2 wersje R. Systemowy R 2.11 (Debian 6.0) i R 2.14.2 w niestandardowej lokalizacji.

Próbuję używać MPI razem ze śniegiem. Kod, który próbuję uruchomić, jest następujący

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

Działa bez problemów na R 2.11. (Uruchamiam skrypt za pomocą mpirun -H localhost,n1,n2,n3,n4 -n 1 R --slave -f code.R). Teraz, gdy próbuję to zrobić w wersji 2.14.2, pojawia się następujący komunikat:

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

Wygląda więc na to, że R ładuje pakiet śniegu w wersji skompilowanej dla R 2.11. Zainstalowałem śnieg pod R 2.14 w moim katalogu domowym i dodałem następujące wiersze do mojego kodu:

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

Dane wyjściowe przed błędem potwierdzają, że rzeczywiście korzystam z wersji 2.14.2, a mój folder pakietów R znajduje się najpierw na ścieżce wyszukiwania. Ale nadal pojawia się błąd.

Więc moje pytanie brzmi: jak ustalić, która wersja pakietu jest ładowana w R? Widzę ze installed.packageswszystkimi zainstalowanymi pakietami, więc może jest jakaś funkcja, która wyświetla podobne informacje dla załadowanych pakietów?


1
znalazłeś dobre rozwiązanie tego problemu? Z mojego doświadczenia i, jak wskazuje pomoc R, zarówno sessionInfo, jak i packageVersion zwracają bieżącą wersję zainstalowaną w miejscu, z którego pakiet został załadowany: może być źle, jeśli inny proces zmieniał pakiety podczas sesji.
RockScience

Odpowiedzi:


519

Możesz tego użyć sessionInfo().

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

Jednak, zgodnie z komentarzami i odpowiedzią poniżej, istnieją lepsze opcje

> packageVersion("snow")

[1] „0.3.9”

Lub:

"Rmpi" %in% loadedNamespaces()

1
Dzięki. Mój błąd polegał na wyświetleniu sessionInfo przed załadowaniem pakietu. W końcu okazało się, że załadowano poprawną wersję pakietu, ale R nadal narzekał na starą wersję. Zainstalowałem własną lokalną wersję R i wszystko działało jak urok.
mpiktas

45
TMI! packageVersion()jest znacznie lepszy w większości przypadków
Louis Maddox

1
Nie radziłbym używać sessionInfo. Patrz uwaga? SessionInfo: „Informacja o„ załadowanych ”pakietach i przestrzeniach nazw jest aktualną wersją zainstalowaną w miejscu, z którego pakiet został załadowany: może być źle, jeśli inny proces zmieniał pakiety podczas sesji.” Więc: jeśli chcesz wiedzieć, czy paczka jest załadowana czy nie, lepiej użyj "Rmpi" %in% loadedNamespaces(); jeśli chcesz wiedzieć, która wersja jest zainstalowana w określonej lokalizacji, lepiej użyjpackageVersion(lib.loc = ...)
RockScience

Zobacz odpowiedź Gábora poniżej, która zwraca wersję aktualnie załadowanego pakietu (która może różnić się od wersji na dysku): stackoverflow.com/a/37369263/946850
krlmlr

273

Możesz użyć, packageVersionaby zobaczyć, która wersja pakietu jest ładowana

> packageVersion("snow")
[1]0.3.9

Chociaż brzmi to tak, jakbyś chciał zobaczyć, którą wersję R używasz, ale w takim przypadku sessionInfopropozycja @ Justina jest właściwym rozwiązaniem


24

Aby sprawdzić wersję R, wykonaj: R --version

Lub po przejściu do powłoki R wydrukuj zawartość version$version.string

EDYTOWAĆ

Aby sprawdzić wersję zainstalowanych pakietów, wykonaj następujące czynności.

Po załadowaniu biblioteki możesz wykonać sessionInfo ()

Ale żeby poznać listę wszystkich zainstalowanych pakietów:

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

LUB, aby wyodrębnić konkretną wersję biblioteki, po wyodrębnieniu informacji za pomocą powyższej installed.packagefunkcji wystarczy użyć nazwy pakietu w pierwszym wymiarze macierzy.

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

Powyżej wydrukuje wersje biblioteki RANN i biblioteki graficznej.


2
Pytanie dotyczyło wersji pakietu, a nie wersji R. A jeśli spojrzę na mój kod, używam version.
mpiktas

packinfo[, "Version", drop=F]daje jeszcze ładniejszy wynik (nazwa pakietu nie jest duplikowana).
Marmite Bomber

21

Technicznie rzecz biorąc, wszystkie odpowiedzi w tym momencie są błędne. packageVersionnie zwraca wersji załadowanego pakietu. Przechodzi na dysk i stamtąd pobiera wersję pakietu.

W większości przypadków nie robi to różnicy, ale czasem tak jest. O ile wiem, jedynym sposobem na uzyskanie wersji załadowanego pakietu jest raczej hackowanie:

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

gdzie pkgjest nazwa pakietu.

EDYCJA: Nie jestem pewien, kiedy ta funkcja została dodana, ale możesz również użyć getNamespaceVersion, jest to czystsze:

getNamespaceVersion(pkg)

`:::`(pkg, .__NAMESPACE__.)$spec[["version"]]jest synonimem asNamespace()metody uzyskania wersji pakietu.
seasmith

3
Ta odpowiedź jest bardzo ważna. packageVersion()pokazuje tylko najlepszy wynik, installed.packages()ale jeśli masz wiele wersji tego samego pakietu i załadujesz konkretną, to nie da ci właściwej odpowiedzi.
calico_

1
Według hughjonesd.shinyapps.io/rcheology jest dostępny, ponieważ jest dostępny już w wersji R 1.7.0.
krlmlr

20

Możesz spróbować czegoś takiego:

  1. package_version(R.version)

  2. getRversion()


11

Rozwiązanie GUI:

Jeśli używasz RStudio, możesz sprawdzić wersję pakietu w Packagesokienku.

wprowadź opis zdjęcia tutaj


5

Użyj metody R, packageDescriptionaby uzyskać opis zainstalowanego pakietu, a dla wersji użyj $Versionjako:

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

4

W oparciu o poprzednie odpowiedzi, oto prosty alternatywny sposób drukowania wersji R, po której następuje nazwa i wersja każdego pakietu załadowanego do przestrzeni nazw. Działa w notatniku Jupyter, gdzie miałem problemy z uruchomieniem sessionInfo()i R --version.

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

Na zewnątrz:

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

2

Stare pytanie, ale nie wśród odpowiedzi, jest moim ulubionym poleceniem, aby uzyskać szybki i krótki przegląd wszystkich załadowanych pakietów:

(.packages())

Aby zobaczyć, która wersja jest zainstalowana dla wszystkich załadowanych pakietów, po prostu użyj powyższego polecenia, aby dokonać podzbioru installed.packages().

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

Zmieniając numer kolumny (3 dla wersji pakietu), możesz uzyskać dowolne inne informacje przechowywane w installed.packages()czytelnej matrycy. Poniżej znajduje się przykład numeru wersji i zależności:

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

1

Użyj następującego kodu, aby uzyskać wersję pakietów R zainstalowanych w systemie:

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

1

Po prostu użyj help(package="my_package")i spójrz na pokazaną wersję.

Zakłada się, że nie ma innych wersji pakietu w tym samym .libPaths.


0

Search () może dać bardziej uproszczoną listę dołączonych pakietów w sesji (tzn. Bez szczegółowych informacji podanych przez sessionInfo ())

szukaj {baza} - R
Opis dokumentacji : Podaje listę dołączonych pakietów. Szukaj()

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"

1
Tak, ale sessionInfo również podaje numer wersji. W moim przypadku to drugie jest zwykle ważniejsze.
mpiktas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.