Pregunta

Andrew Gelman lamentó recientemente la falta de un proceso de actualización para R (probablemente más relevante en Windows que Linux). ¿Alguien tiene un buen truco para hacer la actualización, desde instalar el software hasta copiar todas las configuraciones / paquetes?

Esta sugerencia estaba contenida en los comentarios y es lo que he estado usando recientemente. Primero instale la nueva versión, luego ejecute esto en la versión anterior:

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

Seguido de esto en la nueva versión:

#--run in the new version
setwd("C:/Temp/")
load("Rpackages")
for (p in setdiff(packages, installed.packages()[,"Package"]))
install.packages(p)
¿Fue útil?

Solución

Solo para completar, hay algunas formas de evitar que tenga este problema. Como dijo Dirk, guarde sus paquetes en otro directorio de su computadora.

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

Puede cambiar el valor predeterminado de .Library utilizando la función .libPaths también

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

Esto colocará esta ruta como primer valor en la variable .Library , y la convertirá en la predeterminada.

Si desea automatizar esto aún más, puede especificarlo en el archivo Rprofile.site, que encontrará en el directorio / etc / de su compilación R. Luego se cargará automáticamente cada vez que se cargue R, y ya no tendrá que preocuparse por eso. Solo puede instalar y cargar paquetes desde el directorio especificado.

Finalmente, tengo un pequeño código incluido en mi Rprofile.site que me permite reinstalar todos los paquetes cuando instalo una nueva versión de R. Solo tiene que enumerarlos antes de actualizar a la nueva versión R. Lo hago usando un archivo .RData que contiene una lista actualizada con todos los paquetes.

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])
}

Hago el packagelist.RData especificando .Last () en mi Rprofile.site. Esto actualiza la lista de paquetes si instalé algunos:

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

Cuando instalo una nueva versión R, solo agrego los elementos necesarios al archivo Rprofile.site y todos los paquetes se reinstalan. Tengo que ajustar el Rprofile.site de todos modos (usando contrastes de suma, agregando el código adicional para Tinn-R, estas cosas), por lo que no es realmente un trabajo extra. Solo lleva más tiempo instalar todos los paquetes de nuevo.

Este último bit es equivalente a lo que se da en la pregunta original como solución. Simplemente no necesito preocuparme por la instalación de " " " lista primero.

Nuevamente, esto no funciona sin problemas si tiene paquetes que no están instalados desde CRAN. Pero este código es fácilmente extensible para incluir esos también.

Otros consejos

Esta es una pregunta antigua, por supuesto, pero podría haber una nueva respuesta fácil (que funciona solo para Windows), que acabo de encontrar.

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

La mejor manera de hacerlo es desde el sistema RGui. Todos sus paquetes se transferirán a la nueva carpeta y los anteriores se eliminarán o guardarán (puede elegir cualquiera). Luego, una vez que abra RStudio nuevamente, inmediatamente reconoce que está usando una versión actualizada. Para mí esto funcionó a la perfección,

Más información sobre {installr} aquí .

Simon

Dos sugerencias rápidas:

  1. Use los archivos por lotes de Gabor, que se dice que comprenden herramientas que ayudan con, por ejemplo, Esta biblioteca a granel reubicaciones. Advertencia: no los he usado.

  2. No instale bibliotecas dentro del 'filetree' de la versión R instalada. En Windows, puedo poner R en la versión C: / opt / R / R- $, pero colocar todas las bibliotecas en C: / opt / R / library / usando el siguiente fragmento de código, ya que alivia el problema en primer lugar:

$ cat .Renviron         # this is using MSys/MinGW which looks like Cygwin  
## Example .Renviron on Windows    
R_LIBS="C:/opt/R/library"

El método sugerido anteriormente no funcionará completamente si tiene paquetes que no son de CRAN. Por ejemplo, un paquete personal o un paquete descargado de un sitio que no es CRAN.

Mi método preferido en Windows (actualización 2.10.1 a 2.11.0):

  1. Instalar R-2.11.0
  2. Copie R-2.10.0 / library / * en R-2.11.0/library/
  3. Respuesta " no " a las indicaciones que le preguntan si está bien sobrescribir.
  4. Comience R 2.11.0
  5. Ejecute el comando R update.packages()

Con respecto a la solución dada en la pregunta, puede que no sea fácil ejecutar su versión anterior de R si ya ha instalado la nueva versión. En este caso, aún puede reinstalar todos los paquetes faltantes de la versión R anterior de la siguiente manera.

# 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) 
      }
    }

(Tenga en cuenta que el argumento de list.files () en la primera línea de código debe ser la ruta al directorio de la biblioteca para su versión R anterior, donde todas las carpetas de paquetes de la versión anterior En mi caso actual, esto es " /Library/Frameworks/R.framework/Versions/3.2/Resources/library" . Esto será diferente si su versión R anterior no es 3.2, o si estás en Windows.)

La declaración if se asegura de que un paquete no esté instalado si

  • Ya está instalado en la nueva versión R, o
  • Se ha instalado como una dependencia de un paquete instalado en una iteración anterior del para .

Siguiendo la sugerencia de Dirk, aquí hay un código R para hacerlo en Windows: Cómo actualizar fácilmente R en Windows XP

Actualización (15.04.11): escribí otra publicación sobre el tema, explicando cómo tratar problemas comunes de actualización de R en Windows 7

Dos opciones:

  1. Implementar mi respuesta aquí
  2. Si usa R debajo de Eclipse con StatET, abra Ejecutar configuraciones , haga clic en la pestaña Consola y en el cuadro llamado Fragmento R ejecutado después del inicio agregue esta línea con su elección de directorio: .libPaths("C:/R/library")

Estoy en Windows 8 y por alguna extraña razón, nunca puedo instalar paquetes usando mis conexiones a Internet.

Generalmente lo instalo usando el archivo .zip de CRAN.

Después de pasar de R 3.2.5 a R 3.3.1.

Simplemente copié los paquetes de

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

Y luego reinicié la sesión R. Funcionó a la perfección. No he comprobado si TODOS los paquetes funcionan bien. Pero, los que revisé están funcionando perfectamente bien. Espero que este truco funcione para todos.

Saludos.

La respuesta aceptada podría funcionar si tiene previsión, pero ya me había deshecho de la versión anterior, así que no pude seguir estas instrucciones. Los pasos que se describen a continuación funcionaron para la actualización de OSX de 2.1 y 3.1.

ACTUALIZADO: para obtener el directorio de su versión más reciente (en lugar de escribir 3.1 o 3.2) puede usar los siguientes comandos. El segundo se convierte directamente a la variable R, omitiendo . y .. y .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 "/" 

(Agrega | pbcopy al final para copiarlo directamente en el portapapeles de tu Mac)

Luego, dentro de R puede pegar la variable que se genera. Una vez que se haya definido en la nueva versión de R, puede recorrer los paquetes instalados siguiendo las instrucciones anteriores ...

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

para mí esta página es buena https : //www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ o otra opción es simplemente instalar la nueva opción y al final colocas, por ejemplo, en Windows en mi PC

.libPaths (c ( " D: /Documents/R/win-library/3.2" ;, " C: / Archivos de programa / R / R-3.2.3 / library " ;, " C: / Archivos de programa / R / R-3.2.0 / library " " D: /Documents/R/win-library/2.15" )

todas las rutas de la última versión en mi caso siempre pongo la primera ruta es " D: /Documents/R/win-library/3.2" eso es fijo y luego puse el otro porque no necesita copiar ni mover ningún paquete, en mi sugerencia, simplemente llámelo

linux + bash + debian + apt :

  1. Si está instalando / actualizando a la versión más reciente de R , podemos asumir que tiene los permisos root . (No es esencial, simplemente simplifica mucho el proceso; para mantener la coherencia, el siguiente script usa sudo para todas las instalaciones). Como los paquetes R también se instalan con root , por lo tanto, está permitido colocarlos en / usr / local / .

  2. La llamada a curl a continuación supone que ya estás interesado en la versión de sid de R , la última versión inestable (según se requiera al crear / revisar un paquete R ), es decir,

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

    aunque esto podría reemplazarse fácilmente con una versión estable reciente, p. ej. destructor .

  3. Tenga en cuenta que no estoy usando una clave como está generalmente recomendado . Esto no es esencial, especialmente si (como en el script que sigue) instalamos los paquetes dentro de R ( Rscript -e a continuación). Además, estas claves tienen una tendencia a romperse / cambiar cada pocos años. Por lo tanto, por supuesto, puede agregar el siguiente prefacio al archivo R.sh que se encuentra a continuación:

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

  4. El array de R paquetes claramente no es exhaustivo, pero ofrece algunos ejemplos que personalmente me parecen útiles. Una nueva instalación / actualización con el paquete debian r-recomendado , como se muestra a continuación, debe proporcionar la última versión de todos los paquetes estándar "recomendados" (por ejemplo, survival ). Creo que puede haber un ligero retraso entre una versión de CRAN y una actualización del correspondiente paquete debian . Por lo tanto, es posible que desee agregar algunos de estos elementos al array a continuación si es esencial tener la última versión de un paquete "recomendado" R .

  5. Los debian paquetes instalados en el proceso a continuación tampoco son esenciales (para usar r-base ) ni exhaustivos, pero proporcionan un no de 'complementos' que son importantes para un no razonable. de los paquetes de R .

De todos modos ... coloque lo siguiente en 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

Luego ejecútalo, por ejemplo. Suponiendo que ya está en el directorio: source R.sh .

La instalación de paquetes (ya sea debian o R ) uno por uno en un bucle desde el shell es algo ineficiente, pero permite más sencilla Rastreo de errores, IMHO. Puede tomar algún tiempo dependiendo del no. de paquetes R , por lo que quizás sea más sencillo dejar que se ejecute durante la noche ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top