Como descobrir qual versão do pacote está carregada no R?


405

Estou em um processo de descobrir como usar meu cluster universitário. Possui 2 versões do R instaladas. Todo o sistema R 2.11 (Debian 6.0) e R 2.14.2 em local não padrão.

Estou tentando usar o MPI junto com a neve. O código que estou tentando executar é o seguinte

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

Funciona sem os problemas no R 2.11. (Eu inicio o script com mpirun -H localhost,n1,n2,n3,n4 -n 1 R --slave -f code.R). Agora, quando tento fazer isso com o R 2.14.2, recebo a seguinte mensagem:

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

Portanto, parece que o R carrega a versão do pacote de neve compilada para o R 2.11. Instalei o snow sob R 2.14 na minha pasta pessoal e adicionei as seguintes linhas ao meu código:

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

E a saída antes do erro confirma que eu realmente estou executando o R 2.14.2 e minha pasta de pacotes R é a primeira no caminho de pesquisa. Mas ainda recebo o erro.

Então, minha pergunta é como determinar qual versão do pacote é carregada no R? Eu posso ver com installed.packagestodos os pacotes que estão instalados, então talvez haja alguma função que lista informações semelhantes para pacotes carregados?


1
você encontrou uma boa solução para esse problema? Na minha experiência e como a ajuda do R indica, o sessionInfo e o packageVersion retornam a versão atual instalada no local em que o pacote foi carregado: pode estar errado se outro processo estiver alterando os pacotes durante a sessão.
RockScience

Respostas:


519

Você pode usar sessionInfo()para conseguir isso.

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

No entanto, conforme os comentários e a resposta abaixo, existem opções melhores

> packageVersion("snow")

[1] '0,3,9'

Ou:

"Rmpi" %in% loadedNamespaces()

1
Obrigado. Meu erro foi gerar o sessionInfo antes do carregamento do pacote. No final, verificou-se que a versão correta do pacote estava carregada, mas R ainda reclamava da versão antiga. Instalei minha própria versão local do R e tudo funcionou como um encanto.
Mvctas

45
TMI! packageVersion()é muito melhor na maioria dos casos
Louis Maddox

1
Eu não aconselho a usar sessionInfo. Veja a Nota de? SessionInfo: "As informações sobre pacotes e espaços para nome 'carregados' são a versão atual instalada no local em que o pacote foi carregado: pode estar errado se outro processo estiver alterando os pacotes durante a sessão." Então: se você quer saber se o pacote está carregado ou não, use melhor "Rmpi" %in% loadedNamespaces(); se você quiser saber qual versão está instalada em um local específico, use melhorpackageVersion(lib.loc = ...)
RockScience 6/15

Consulte a resposta de Gábor abaixo para obter uma resposta que retorne a versão de um pacote atualmente carregado (que pode ser diferente da versão em disco): stackoverflow.com/a/37369263/946850
krlmlr

273

Você pode usar packageVersionpara ver qual versão de um pacote está carregada

> packageVersion("snow")
[1]0.3.9

Embora pareça que você queira ver qual versão do R você está executando, nesse caso, a sessionInfosugestão de Justin é o caminho a seguir.


24

Para verificar a versão do R, execute: R --version

Ou depois que você estiver no shell R, imprima o conteúdo de version$version.string

EDITAR

Para verificar a versão dos pacotes instalados, faça o seguinte.

Após carregar a biblioteca, você pode executar sessionInfo ()

Mas para conhecer a lista de todos os pacotes instalados:

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

OU para extrair uma versão específica da biblioteca, depois de extrair as informações usando a installed.packagefunção acima, use o nome do pacote na primeira dimensão da matriz.

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

O texto acima imprimirá as versões da biblioteca da RANN e da biblioteca de gráficos.


2
A questão era sobre a versão do pacote, não a versão R. E se olhar para o meu código, eu uso version.
Mvctas

packinfo[, "Version", drop=F]um resultado ainda mais bonito (o nome do pacote não é duplicado).
Marmite Bomber

21

Tecnicamente falando, todas as respostas no momento estão erradas. packageVersionnão retorna a versão do pacote carregado. Ele vai para o disco e busca a versão do pacote a partir daí.

Isso não fará diferença na maioria dos casos, mas às vezes faz. Tanto quanto posso dizer, a única maneira de obter a versão de um pacote carregado é o bastante hackeado:

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

onde pkgé o nome do pacote.

Edição: Não tenho certeza quando esta função foi adicionada, mas você também pode usar getNamespaceVersion, isso é mais limpo:

getNamespaceVersion(pkg)

`:::`(pkg, .__NAMESPACE__.)$spec[["version"]]é um sinônimo do asNamespace()método de obter a versão do pacote.
seasmith

3
Esta resposta é tão importante. packageVersion()mostra apenas o resultado principal, installed.packages()mas se você possui várias versões do mesmo pacote e carrega uma especificamente, ela não fornecerá a resposta certa.
Calico_

1
Por hughjonesd.shinyapps.io/rcheology , está disponível desde o início no R 1.7.0.
Krlmlr 20/05/19

20

Você pode tentar algo como isto:

  1. package_version(R.version)

  2. getRversion()


11

Solução GUI:

Se você estiver usando o RStudio, poderá verificar a versão do pacote no Packagespainel.

insira a descrição da imagem aqui


5

Use o método R packageDescriptionpara obter a descrição do pacote instalado e, para a versão, use apenas $Version:

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

4

Com base nas respostas anteriores, aqui está uma maneira alternativa simples de imprimir a versão R, seguida pelo nome e versão de cada pacote carregado no espaço para nome. Funciona no notebook Jupyter, onde tive problemas de execução sessionInfo()e R --version.

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

Fora:

[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

Pergunta antiga, mas não entre as respostas, é o meu comando favorito para obter uma visão geral rápida e curta de todos os pacotes carregados:

(.packages())

Para ver qual versão está instalada em todos os pacotes carregados, basta usar o comando acima para subconjunto installed.packages().

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

Alterando o número da coluna (3 para a versão do pacote), você pode obter qualquer outra informação armazenada installed.packages()em uma matriz de fácil leitura. Abaixo está um exemplo para o número da versão e dependência:

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

1

Use o código a seguir para obter a versão dos pacotes R instalados no sistema:

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

1

Basta usar help(package="my_package")e olhar para a versão mostrada.

Isso pressupõe que não há outras versões de pacotes na mesma .libPaths.


0

Search () pode fornecer uma lista mais simplificada dos pacotes anexados em uma sessão (ou seja, sem as informações detalhadas fornecidas por sessionInfo ())

search {base} - R
Descrição da documentação : Fornece uma lista dos pacotes anexados. Procurar()

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
Sim, mas o sessionInfo também fornece o número da versão. No meu caso, o último é geralmente mais importante.
Mvctas
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.