Maneira indolor de instalar uma nova versão do R?

158

Andrew Gelman recentemente lamentou a falta de um processo de atualização fácil para o R (provavelmente mais relevante no Windows que no Linux). Alguém tem um bom truque para fazer a atualização, desde a instalação do software até a cópia de todas as configurações / pacotes?

Essa sugestão estava contida nos comentários e é o que tenho usado recentemente. Primeiro você instala a nova versão e, em seguida, execute-a na versão antiga:

#--run in the old version of R
setwd("C:/Temp/")
packages <- installed.packages()[,"Package"]
save(packages, file="Rpackages")

Seguido por isso na nova versão:

#--run in the new version
setwd("C:/Temp/")
load("Rpackages")
for (p in setdiff(packages, installed.packages()[,"Package"]))
install.packages(p)
Shane
fonte
1
Qual a atualização da solução usada aqui?
maj
Eu usei recentemente e funciona muito bem.
Litwos 10/10

Respostas:

74

Apenas para completar, existem algumas maneiras de impedir que você tenha esse problema. Como Dirk disse, salve seus pacotes em outro diretório do seu computador.

install.packages("thepackage",lib="/path/to/directory/with/libraries")

Você pode alterar o .Libraryvalor padrão usando a função .libPathstambém

.libPaths("/path/to/directory/with/libraries")

Isso colocará esse caminho como o primeiro valor na .Libraryvariável e o tornará o padrão.

Se você deseja automatizar isso ainda mais, é possível especificar isso no arquivo Rprofile.site, que você encontra no diretório / etc / do seu R build. Em seguida, ele será carregado automaticamente sempre que R for carregado, e você não precisará mais se preocupar com isso. Você pode simplesmente instalar e carregar pacotes do diretório especificado.

Finalmente, tenho um pequeno código incluído no meu Rprofile.site, permitindo-me reinstalar todos os pacotes quando instalo uma nova versão R. Você apenas precisa listá-los antes de atualizar para a nova versão R. Eu faço isso usando um arquivo .RData que contém uma lista atualizada com todos os pacotes.

library(utils)

## Check necessary packages
load("G:\Setinfo\R\packagelist.RData") # includes a vector "pkgs"
installed <- pkgs %in% installed.packages()[, 'Package']
if (length(pkgs[!installed]) >=1){
  install.packages(pkgs[!installed])
}

Eu faço o packagelist.RData especificando .Last()no meu Rprofile.site. Isso atualiza a lista de pacotes se eu instalei alguns:

.Last <- function(){
  pkgs <- installed.packages()[,1]
  if (length(pkgs) > length(installed)){
    save(pkgs,file="G:\Setinfo\R\packagelist.RData")
  }
}

Quando instalo uma nova versão R, apenas adiciono os elementos necessários ao arquivo Rprofile.site e todos os pacotes são reinstalados. Tenho que ajustar o Rprofile.site de qualquer maneira (usando contrastes de soma, adicionando o código extra para Tinn-R, essas coisas), para que não seja realmente um trabalho extra. Leva apenas um tempo extra para instalar todos os pacotes novamente.

Este último bit é equivalente ao que é dado na pergunta original como uma solução. Só não preciso me preocupar em obter a lista "instalada" primeiro.

Novamente, isso não funcionará perfeitamente se você tiver pacotes que não estão instalados no CRAN. Mas esse código é facilmente extensível para incluir também esses.

Joris Meys
fonte
2
@ Pasad: Thx. A resposta está um pouco desatualizada, R 2.12 e salva automaticamente os pacotes que você instala em algum lugar de uma biblioteca padrão fora da árvore R principal. Portanto, tudo o que você precisa fazer agora é encontrar a biblioteca e vincular a ela, se isso não acontecer por si só.
Joris Meys
@ 428790: Onde posso encontrar a biblioteca que você mencionou?
Daniel Krizian
@DanielKrizian Veja o padrão no objeto interno .Library. No meu caso, ele aponta de volta para a pasta de instalação R se mantenha inalterado (que eu particularmente não gosto, mas bem)
Joris Meys
42

Esta é uma pergunta antiga, é claro, mas pode haver uma nova resposta fácil (funcionando apenas para Windows), que acabei de encontrar.

install.packages("installr")
require(installr)
updateR()

A melhor maneira de fazer isso é do sistema RGui. Todos os seus pacotes serão transferidos para a nova pasta e os antigos serão excluídos ou salvos (você pode escolher). Depois que você abrir o RStudio novamente, ele imediatamente reconhecerá que você está usando uma versão atualizada. Para mim, isso funcionou como um encanto,

Mais informações sobre {installr} aqui .

Simon

SJDS
fonte
2
E os pacotes instalados através do github?
skan
8
Deve-se mencionar que isso é para Windows.
Beroe
27

Duas sugestões rápidas:

  1. Use os arquivos em lote do Gabor, que são considerados ferramentas que auxiliam, por exemplo, nas realocações desta biblioteca em massa. Advertência: Eu não os usei.

  2. Não instale bibliotecas dentro da 'árvore de arquivos' da versão R instalada. No Windows, posso colocar R na versão C: / opt / R / R- $, mas colocar todas as bibliotecas em C: / opt / R / library / usando o seguinte snippet, pois alivia o problema em primeiro lugar:

$ cat .Renviron         # this is using MSys/MinGW which looks like Cygwin  
## Example .Renviron on Windows    
R_LIBS="C:/opt/R/library"
Dirk Eddelbuettel
fonte
Gostaria de saber se a transferência de pacotes de, digamos, R 2.8 para R.9 causa algum problema? Ou tudo ficará bem, desde que você faça um update.packages na nova versão?
Eduardo Leoni
Eu venho fazendo isso há um bom tempo e não tive problemas. R é tipicamente "compatível com a frente". E o IIRC apenas uma atualização (pode ter sido R 1.9 -> R 2.0) exigiu uma reconstrução de todas as bibliotecas.
Dirk Eddelbuettel 10/10/09
5
Também geralmente copio minha pasta Biblioteca para minha nova instalação e executo update.packages. Parece funcionar bem. Uma pasta de instalação opcional, no entanto, é muito mais elegante.
kpierce8
Só para apontar - Eu adicionei uma resposta com código de R realizando sugestão de Dirk (para usuários do Windows R)
Tal Galili
25

O método sugerido acima não funcionará completamente se você tiver pacotes que não sejam do CRAN. Por exemplo, um pacote pessoal ou um pacote baixado de um site que não seja o CRAN.

Meu método preferido no Windows (atualizando 2.10.1 para 2.11.0):

  1. Instale o R-2.11.0
  2. Copiar R-2.10.0/library/*paraR-2.11.0/library/
  3. Responda "não" às solicitações perguntando se você pode substituir.
  4. Iniciar R 2.11.0
  5. Execute o comando R update.packages()
Kevin Wright
fonte
7

Com relação à solução fornecida na pergunta, pode não ser fácil executar sua versão mais antiga do R se você já instalou a nova versão. Nesse caso, você ainda pode reinstalar todos os pacotes ausentes da versão R anterior, da seguinte maneira.

# Get names of packages in previous R version
old.packages <- list.files("/Library/Frameworks/R.framework/Versions/3.2/Resources/library")

# Install packages in the previous version. 

# For each package p in previous version...
    for (p in old.packages) {
      # ... Only if p is not already installed
      if (!(p %in% installed.packages()[,"Package"])) {
        # Install p 
        install.packages(p) 
      }
    }

(Observe que o argumento list.files()na primeira linha de código deve ser o caminho para o diretório da biblioteca da sua versão R anterior, onde estão todas as pastas de pacotes na versão anterior. No meu caso atual, isso é "/Library/Frameworks/R.framework/Versions/3.2/Resources/library". Isso será diferente se sua versão R anterior não é 3.2 ou se você estiver no Windows.)

A ifdeclaração garante que um pacote não esteja instalado se

  • Ele já está instalado na nova versão R ou
  • Foi instalado como uma dependência de um pacote instalado em uma iteração anterior do forloop.
Raffaele Vacca
fonte
Isso resolveu meu problema, obrigado! Esta pergunta pode parecer um pouco idiota, mas posso excluir bibliotecas antigas?
m_c
4

Seguindo a sugestão de Dirk, aqui está um código R para fazer isso no Windows: Como atualizar facilmente o R no Windows XP

Atualização (15.04.11): escrevi outro post sobre o assunto, explicando como lidar com problemas comuns da atualização do R no Windows 7

Tal Galili
fonte
2
Para as versões mais recentes do R, Tal possui um pacote chamado installrque automatiza esse processo (atualmente apenas no Windows) r-statistics.com/tag/installr ou github.com/talgalili/installr
Louis Maddox
1
Run Rgui.exe de C: \ Program Files \ R \ R-3.6.0 \ bin \ i386 e escrever o código para o console: install.packages(installr); library(installr); updateR(TRUE). No final, [1] TRUEaparece. Pelo excelente pacote de Galili, passei do R 3.6.0 para o R 3.6.1 com muita facilidade. Obrigado Tal.
Erdogan CEVHER 21/08/19
2

Duas opções:

  1. Implementar minha resposta aqui
  2. Se você usar R no Eclipse com StatET, abra Configurações de Execução , clique na guia Console e, na caixa chamada R snippet run after startup, adicione esta linha à sua escolha de diretório:.libPaths("C:/R/library")
Fred
fonte
1

Estou no Windows 8 e, por algum motivo estranho, nunca consigo instalar pacotes usando minhas conexões com a Internet.

Geralmente, instalo-o usando o arquivo .zip do CRAN.

Depois passei do R 3.2.5 para o R 3.3.1.

Simplesmente copiei os pacotes de

C:\Path\to\packa\R\win-library\3.2para C:\Path\to\packa\R\win-library\3.3.

E então reiniciei a sessão R. Funcionou perfeitamente. Eu não verifiquei se TODOS os pacotes estão funcionando bem. Mas os que verifiquei estão funcionando perfeitamente bem. Espero que este hack funcione para todos.

Felicidades.

Pragyaditya Das
fonte
1

A resposta aceita pode funcionar se você tiver uma previsão, mas eu já havia me livrado da versão antiga, portanto não fui capaz de seguir essas instruções. As etapas descritas abaixo funcionaram para a atualização do OSX de 2.1 e 3.1.

ATUALIZADO: Para obter o diretório da sua versão mais recente (em vez de digitar 3.1 ou 3.2), você pode usar os comandos abaixo. O segundo converte diretamente na variável R, pulando .e ..e .DS_Store, use:

OLD=$(ls -d /Library/Frameworks/R.framework/Versions/*.* |tail -n 2 | head -n 1)Resources/library/
echo "packages = c(\"`ls $OLD | tail +4| paste -s -d ',' - | sed -E 's|,|\",\"|'g`\")" | tr -d "/" 

(Adicione |pbcopyao final para copiá-lo diretamente para a área de transferência do Mac)

Em R, você pode colar a variável gerada. Uma vez definido na nova versão do R, você pode percorrer os pacotes instalados a partir das instruções acima ...

for (p in setdiff(packages, installed.packages()[,"Package"]))
   install.packages(p, dependencies=TRUE, quiet=TRUE, ask=FALSE)
beroe
fonte
0

para mim esta página é boa https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ ou outra opção é apenas instalar o novo opção e no final você coloca, por exemplo, no windows no meu pc

.libPaths (c ("D: /Documents/R/win-library/3.2", "C: / Arquivos de Programas / R / R-3.2.3 / library", "C: / Arquivos de Programas / R / R-3.2 .0 / library "," D: /Documents/R/win-library/2.15 ")

cada caminho da última versão, no meu caso, eu sempre coloco o primeiro caminho é "D: /Documents/R/win-library/3.2" corrigido e, em seguida, coloco o outro porque você não precisa copiar ou mover nenhum pacote, em minha sugestão basta chamá-lo

juanprimate
fonte
0

linux+ bash+ debian+ aptusuários:

  1. Se você estiver instalando / atualizando para a versão mais recente do R, podemos assumir que você tem rootpermissões. (Não é essencial, apenas torna o processo muito mais simples; por consistência, o script abaixo usa sudopara todas as instalações.) Como os Rpacotes também são instalados root, é permitido colocá-los /usr/local/.

  2. A chamada curlabaixo pressupõe que você já esteja interessado no sidlançamento da Rúltima versão instável (conforme necessário ao criar / verificar um Rpacote), ou seja,

    cat /etc/apt/sources.list | grep 'sid' || exit 1

    embora isso possa ser facilmente substituído por uma versão estável recente, por exemplo buster.

  3. Note que estou não utilizando uma chave como é geralmente recomendado . Isso não é essencial, principalmente se (como no script a seguir) instalarmos pacotes dentro de R si ( Rscript -eabaixo). Além disso, essas chaves tendem a quebrar / mudar a cada poucos anos. Portanto, é claro que você pode adicionar o seguinte prefácio ao arquivo a R.shseguir:

    sudo apt-key adv --keyserver keyserver.ubuntu.com \ --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

  4. O pacotearray of claramente não é exaustivo, mas fornece alguns exemplos que eu pessoalmente acho úteis. Uma nova instalação / atualização com o pacote , como abaixo, deve fornecer a versão mais recente de todos os pacotes 'recomendados' padrão (por exemplo ). Acredito que possa haver um pequeno atraso entre uma versão do CRAN e uma atualização para o pacote relevante . Portanto, você pode adicionar alguns desses itens abaixo se a versão mais recente de um pacote 'recomendado' for essencial.Rdebianr-recommendedsurvivaldebianarrayR

  5. Os debianpacotes instalados no processo abaixo também não são essenciais (para uso r-base) nem exaustivos, mas fornecem um não. de 'add-ons' que são importantes para um número razoável. de Rpacotes.

Enfim ... coloque o seguinte em R.sh:

sudo apt update && sudo apt --yes full-upgrade
sudo apt install --yes libappstream4 curl
### ov1 = online version; lv1 = local version (i.e. currently installed)
ov1=$(curl --silent --url https://packages.debian.org/sid/r-base |
    grep 'meta name=\"Keywords\"' |
    grep --only-matching '[0-9].*[0-9]') ; echo $ov1
## command -v = print a description of COMMAND similar to the `type' builtin
## && = if prior command succeeds, then do; || = if prior fails, then do
command -v 'R --version' &&
    lv1=$(R --version |
              grep --only-matching '[0-9\.]*[0-9]' |
              ## || = otherwise
              head -1) ||
        lv1=0
## 'lt' = less than
if dpkg --compare-versions "$lv1" 'lt' "$ov1" 
then ## declare -a = indexed array
     declare -a deb1=('r-base' 'r-base-dev' 'r-recommended')
     for i in "${deb1[@]}"
     do sudo apt install --yes "$i"
     done
fi
### certain Debian packages are required by 'R' so best have these first
sudo apt install --yes ccache libcairo2-dev libxml2-dev libcurl4-openssl-dev \
     libssl-dev liblapack-dev libssl-dev
declare -a pkg1=('data.table' 'ggplot2' 'knitr' 'devtools' 'roxygen2')
## installing as 'root' so these are installed in
Rscript -e ".libPaths()[1]"
for i in "${pkg1[@]}"
do sudo Rscript -e "install.packages('$i', dependencies=TRUE)"
done
### other useful additions
sudo apt install --yes libblas-dev libboost-dev libarmadillo-dev \
     jags pandoc pandoc-citeproc 
sudo apt update && sudo apt full-upgrade

Em seguida, executá-lo, por exemplo, assumindo no diretório já: source R.sh.

Instalar pacotes (seja debianou R) um por um em um loop do shell é um pouco ineficiente, mas permite o rastreamento mais simples de erros, IMHO. Pode levar algum tempo, dependendo do não. de Rpacotes, então talvez seja mais fácil deixar correr durante a noite ...

dardisco
fonte
1
Não sei por que 'sobrevivência' está nessa lista de pacotes suplementares. (E é bem possível que eu esteja enganando esse script bash.) Tem sido um pacote "recomendado" desde ... para sempre. Se você não estiver instalando todos os pacotes recomendados com esse script, ele deverá ser modificado para isso. Também pense que o conjunto de pacotes r-base-devel seria necessário para qualquer pessoa que usasse linux. E por que não adicionar o PPA de Michael Rutter?
IRTFM 30/05/19
Obrigado! Atualizado à luz dos seus comentários úteis. Concordo, não há necessidade de rotina para instalar um pacote que já está em r-recommended. 'r-base-devel' é conhecido como r-base-dev( debianpacote) - já foi incluído. Não sou avesso a usar uma chave de segurança (resposta atualizada). A resposta evita o uso de a PPA= Personal Package Archives, pois dependem necessariamente de uma pessoa e, portanto, potencialmente falíveis. Como o próprio Michael Rutter diz (2012): "Se você usa o CRAN, não há razão para mudar para o PPA, pois os mesmos pacotes são fornecidos nos dois locais".
Dardisco 31/05/19