Pergunta

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

Esta sugestão foi contido nos comentários e é o que eu tenho usado recentemente. Primeiro você instalar a nova versão, então executar este no antigo verion:

#--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)
Foi útil?

Solução

Apenas para completar, há algumas maneiras de impedir que você tenha este problema. Como disse Dirk, salvar seus pacotes em outro diretório em seu computador.

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

Você pode alterar o valor .Library padrão usando a função .libPaths demasiado

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

Isto irá colocar este caminho como um primeiro valor na variável .Library, e tornará o padrão.

Se você deseja automatizar isso ainda mais, você pode especificar isso no arquivo Rprofile.site, que você encontra no diretório / etc / do seu R construção. Em seguida, ele irá carregar automaticamente sempre que R cargas, e você não precisa se preocupar com isso mais. Você pode simplesmente instalar e pacotes de carga a partir do diretório especificado.

Finalmente, tenho um pequeno código incluído no meu Rprofile.site permitindo-me para reinstalar todos os pacotes quando eu instalar uma nova versão R. Você apenas tem que enumerá-los até antes você atualizar para a nova versão R. Eu faço isso usando um arquivo .rdata contendo 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() na minha 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 eu instalar uma nova versão R, eu só adicionar os elementos necessários para o arquivo Rprofile.site e todos os pacotes são reinstalados. Eu tenho que ajustar o Rprofile.site qualquer maneira (usando contrastes soma, adicionando o código extra para Tinn-R, estas coisas), por isso não é realmente o trabalho extra. Ele só tem tempo extra instalar todos os pacotes de novo.

Este último bit é equivalente ao que é dado na pergunta original como uma solução. Eu só não precisa se preocupar sobre a obtenção da lista "instalado" em primeiro lugar.

Mais uma vez, isso não impecável trabalho se você tem pacotes que não são instalados a partir CRAN. Mas este código é facilmente extensível para incluir aqueles também.

Outras dicas

Esta é uma velha questão, claro, mas pode haver uma nova resposta fácil (trabalhando apenas para Windows), que eu só encontrei.

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

A melhor maneira de fazer isso é a partir do sistema Rgui. Todos os seus pacotes serão transferidos para a nova pasta e os antigos serão apagados ou salvos (você pode escolher qualquer um). Em seguida, uma vez que você abrir rstudio novamente, ele imediatamente reconhece que você está usando uma versão atualizada. Para mim, isso funcionou como um encanto,

Mais informações em {installr} aqui .

Simon

Duas sugestões rápidas:

  1. Usar Gabor batchfiles que se diz ferramentas compreendem ajudando com por exemplo, Este volume deslocalizações biblioteca. Ressalva:. Eu não usei-los

  2. Não instale bibliotecas dentro do 'filetree' da versão R instalado. No Windows, eu posso colocá-R em C: / opt / R / $ version R- mas colocar todas as bibliotecas em C: / opt / R / biblioteca / usando o seguinte trecho, 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"

O método sugerido acima não completamente funcionar se você tem pacotes que não são de CRAN. Por exemplo, um pacote de pessoal ou um pacote baixado de um site não-CRAN.

O meu método preferido no Windows (actualização 2.10.1 a 2.11.0):

  1. Instale R-2.11.0
  2. Copiar R-2.10.0/library/* para R-2.11.0/library/
  3. Resposta "não" às solicitações que lhe pergunta se está tudo bem para substituir.
  4. Inicie R 2.11.0
  5. Execute o comando R update.packages()

Com relação à solução dada na pergunta, ele pode não ser fácil de executar a sua versão mais velha de R se você já tiver instalado a nova versão. Neste 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) 
      }
    }

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

A declaração if garante que um pacote é não instalado se

  • 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 loop for.

A seguir a sugestão de Dirk, aqui é algum código R fazê-lo no Windows: Como atualizar facilmente R no Windows XP

Update (15.04.11): I escreveu outro post sobre o assunto, explicando como lidar com problemas comuns de melhoria R no Windows 7

Duas opções:

  1. Implementar a minha resposta aqui
  2. Se você usar R em Eclipse com statet, aberta Configurações Run , clique em Console separador e na caixa chamada R Trecho de executar após a inicialização adicionar esta linha com sua escolha de diretório: .libPaths("C:/R/library")

Estou no Windows 8 e, por algum motivo estranho, eu nunca pode instalar pacotes usando minhas conexões de internet.

Eu geralmente instalá-lo usando o arquivo .zip de CRAN.

Depois que passou de R 3.2.5 para R 3.3.1.

Eu simplesmente copiou os pacotes de

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

E então eu reiniciado a sessão R. Funcionou perfeitamente. Eu não tenho verificado se todos os pacotes estão funcionando bem. Mas, os que eu verificados estão funcionando perfeitamente bem. Espero que isso funcione de hack para todos.

Felicidades.

A resposta aceita pode funcionar se você tem previsão, mas eu já tinha se livrado da versão anterior, portanto não foi capaz de seguir estas instruções. As etapas descritas abaixo trabalhou para OSX melhoria de 2,1 e 3,1.

ATUALIZADO: Para obter o diretório para sua versão mais recente (em vez de digitar 3.1 ou 3.2) você pode usar o abaixo comandos. O segundo convertidos directamente para a variável-R, saltando . e .. e .DS_Store, uso:

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

(Adicionar |pbcopy até o fim para copiá-lo diretamente para o clipboard Mac)

Então, dentro de R você pode colar esse variável que é gerado. Uma vez que é definido na nova versão de 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)

para mim desta página é bom https : //www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ ou Outra opção é simplesmente instalar a nova opção e no final, você colocar, por exemplo, em janelas no meu pc

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

cada caminho da última versão no meu caso eu sempre colocar o primeiro caminho é "D: /Documents/R/win-library/3.2" que é fixo e então eu colocar o outro porque você não precisa copiar ou mover quaisquer pacotes, na minha Sugerir apenas chamá-lo

linux + bash + debian + usuários apt:

  1. Se você está instalando / upgrade para a versão mais recente do R, então podemos assumir que tem root permissões. (Não é essencial, apenas torna o processo muito mais simples;. Para a consistência do script abaixo usos sudo para todas instalações) Como os pacotes R também são instalados por root, é permissível para colocá-las em /usr/local/.

  2. A chamada para curl abaixo assume que já estão interessados ??na liberação sid de R, a mais recente instável versão (como exigido na construção / verificar um pacote R) ie

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

    embora isso possa ser facilmente substituído com um recente lançamento estável por exemplo buster.

  3. Note que eu sou não usando um tecla como é normalmente recomendado . Isso não é essencial, especialmente se (como no roteiro que segue) que instalar pacotes em em si R (Rscript -e abaixo). Além disso, essas chaves têm uma tendência a quebrar / mudar a cada poucos anos. Assim, você são, naturalmente, bem-vindos para adicionar o seguinte prefácio da R.sh arquivo que segue:

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

  4. O array de pacotes R não é claramente exaustiva, mas dá alguns exemplos que eu pessoalmente achar útil. Uma nova instalação / upgrade com o pacote debian r-recommended , como abaixo, deve dar a última versão de todos os pacotes padrão 'recomendado' (por exemplo survival). Eu acredito que pode haver um ligeiro atraso entre uma liberação CRAN e uma atualização para o pacote debian relevante. Assim, você pode querer adicionar alguns destes ao array abaixo se ter a versão mais recente de um pacote R 'recomendado' é essencial.

  5. Os pacotes debian instaladas no processo abaixo também não essencial (para usar r-base) nem exaustiva, mas fornecer um não. de 'add-ons', que são importantes para um não razoável. de pacotes de R.

De qualquer forma ... 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

Como instalar pacotes (seja debian ou R) um por um em um loop de shell é um pouco ineficiente, mas permite a simples detecção de erros, IMHO. Pode levar algum tempo, dependendo do no. de pacotes de R, talvez por isso mais simples para deixar correr durante a noite ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top