maneira indolor para instalar uma nova versão do R?
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)
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:
-
Usar Gabor batchfiles que se diz ferramentas compreendem ajudando com por exemplo, Este volume deslocalizações biblioteca. Ressalva:. Eu não usei-los
-
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):
- Instale R-2.11.0
- Copiar
R-2.10.0/library/*
paraR-2.11.0/library/
- Resposta "não" às solicitações que lhe pergunta se está tudo bem para substituir.
- Inicie R 2.11.0
- 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:
- Implementar a minha resposta aqui
- 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
:
-
Se você está instalando / upgrade para a versão mais recente do
R
, então podemos assumir que temroot
permissões. (Não é essencial, apenas torna o processo muito mais simples;. Para a consistência do script abaixo usossudo
para todas instalações) Como os pacotesR
também são instalados porroot
, é permissível para colocá-las em/usr/local/
. -
A chamada para
curl
abaixo assume que já estão interessados ??na liberaçãosid
deR
, a mais recente instável versão (como exigido na construção / verificar um pacoteR
) iecat /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
. -
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 daR.sh
arquivo que segue:sudo apt-key adv --keyserver keyserver.ubuntu.com \ --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
-
O
array
de pacotesR
não é claramente exaustiva, mas dá alguns exemplos que eu pessoalmente achar útil. Uma nova instalação / upgrade com o pacotedebian
r-recommended
, como abaixo, deve dar a última versão de todos os pacotes padrão 'recomendado' (por exemplosurvival
). Eu acredito que pode haver um ligeiro atraso entre uma liberação CRAN e uma atualização para o pacotedebian
relevante. Assim, você pode querer adicionar alguns destes aoarray
abaixo se ter a versão mais recente de um pacoteR
'recomendado' é essencial. -
Os pacotes
debian
instaladas no processo abaixo também não essencial (para usarr-base
) nem exaustiva, mas fornecer um não. de 'add-ons', que são importantes para um não razoável. de pacotes deR
.
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 ...