Une manière indolore d'installer une nouvelle version de R?


158

Andrew Gelman a récemment déploré l'absence de processus de mise à niveau facile pour R (probablement plus pertinent sous Windows que Linux). Quelqu'un a-t-il une bonne astuce pour effectuer la mise à niveau, de l'installation du logiciel à la copie de tous les paramètres / packages?

Cette suggestion était contenue dans les commentaires et c'est ce que j'ai utilisé récemment. D'abord, vous installez la nouvelle version, puis exécutez ceci dans l'ancienne version:

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

Suivi par ceci dans la nouvelle version:

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

1
Dans quelle mesure la solution utilisée ici est-elle à jour?
maj

Je l'ai utilisé récemment et fonctionne très bien.
Litwos

Réponses:


74

Pour être complet, il existe des moyens de vous éviter d'avoir ce problème. Comme Dirk l'a dit, enregistrez vos packages dans un autre répertoire de votre ordinateur.

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

Vous pouvez modifier la valeur par défaut .Libraryvaleur à l' aide de la fonction .libPathstrop

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

Cela mettra ce chemin comme première valeur dans la .Libraryvariable, et en fera la valeur par défaut.

Si vous souhaitez automatiser cela davantage, vous pouvez le spécifier dans le fichier Rprofile.site, que vous trouverez dans le répertoire / etc / de votre version R. Ensuite, il se chargera automatiquement à chaque chargement de R, et vous n'avez plus à vous en soucier. Vous pouvez simplement installer et charger des packages à partir du répertoire spécifié.

Enfin, j'ai un petit code inclus dans mon Rprofile.site me permettant de réinstaller tous les packages lorsque j'installe une nouvelle version R. Il vous suffit de les lister avant de passer à la nouvelle version R. Je le fais en utilisant un fichier .RData contenant une liste mise à jour avec tous les packages.

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

Je crée le packagelist.RData en spécifiant .Last()dans mon Rprofile.site. Cela met à jour la liste des packages si j'en ai installé:

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

Lorsque j'installe une nouvelle version R, j'ajoute simplement les éléments nécessaires au fichier Rprofile.site et tous les packages sont réinstallés. Je dois quand même ajuster le Rprofile.site (en utilisant des contrastes de somme, en ajoutant le code supplémentaire pour Tinn-R, ces choses), donc ce n'est pas vraiment un travail supplémentaire. La réinstallation de tous les packages prend juste plus de temps.

Ce dernier bit est équivalent à ce qui est donné dans la question d'origine comme solution. Je n'ai simplement pas besoin de m'inquiéter d'avoir la liste «installée» en premier.

Encore une fois, cela ne fonctionne pas parfaitement si vous avez des packages qui ne sont pas installés à partir de CRAN. Mais ce code est facilement extensible pour inclure ceux-là aussi.


2
@Prasad: Merci. La réponse est cependant un peu obsolète, R 2.12 et en outre, enregistrez automatiquement les paquets que vous installez vous-même quelque part dans une bibliothèque standard en dehors de l'arborescence R principale. Donc, tout ce que vous avez à faire maintenant est de vous assurer de trouver cette bibliothèque et de créer un lien vers elle, si cela ne s'est pas produit tout seul.
Joris Meys

@ 428790: Où puis-je trouver cette bibliothèque que vous mentionnez?
Daniel Krizian

@DanielKrizian Regardez la valeur par défaut dans l'objet interne .Library. Dans mon cas, il pointe vers le dossier d'installation R s'il est inchangé (ce que je n'aime pas particulièrement, mais bon)
Joris Meys

42

C'est une vieille question bien sûr, mais il pourrait y avoir une nouvelle réponse facile (ne fonctionnant que pour Windows), que je viens de trouver.

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

La meilleure façon de procéder est d'utiliser le système RGui. Tous vos packages seront transférés dans le nouveau dossier et les anciens seront supprimés ou enregistrés (vous pouvez choisir l'un ou l'autre). Ensuite, une fois que vous ouvrez à nouveau RStudio, il reconnaît immédiatement que vous utilisez une version mise à jour. Pour moi, cela a fonctionné comme un charme,

Plus d'informations sur {installr} ici .

Simon


2
Qu'en est-il des packages installés via github?
skan du

8
Il convient de mentionner que c'est pour Windows.
beroe

27

Deux suggestions rapides:

  1. Utilisez les fichiers batch de Gabor qui sont censés comprendre des outils aidant par exemple à déplacer ces bibliothèques en masse. Attention: je ne les ai pas utilisés.

  2. N'installez pas de bibliothèques dans le 'filetree' de la version R installée. Sous Windows, je peux mettre R dans la version C: / opt / R / R- $ mais placer toutes les bibliothèques dans C: / opt / R / library / en utilisant l'extrait de code suivant car il atténue le problème en premier lieu:

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

Je me demande si le transfert de paquets de, disons, R 2.8 vers R.9 pose des problèmes? Ou tout ira-t-il bien tant que vous effectuez une mise à jour.packages dans la nouvelle version?
Eduardo Leoni

Je fais cela depuis un bon moment et je n'ai pas eu de problèmes. R est typiquement "compatible avec l'avant". Et IIRC, une seule mise à jour (peut-être R 1.9 -> R 2.0) a nécessité une reconstruction de toutes les bibliothèques.
Dirk Eddelbuettel

5
En général, je copie simplement mon dossier Library dans ma nouvelle installation et j'exécute update.packages. Cela semble marcher correctement. Un dossier d'installation facultatif est cependant beaucoup plus élégant.
kpierce8

Juste pour souligner - j'ai ajouté une réponse avec le code R exécutant la suggestion de Dirk (pour les utilisateurs de Windows R)
Tal Galili

26

La méthode suggérée ci-dessus ne fonctionnera pas complètement si vous avez des packages qui ne proviennent pas de CRAN. Par exemple, un package personnel ou un package téléchargé à partir d'un site non CRAN.

Ma méthode préférée sur Windows (mise à niveau de la 2.10.1 vers la 2.11.0):

  1. Installez R-2.11.0
  2. Copier R-2.10.0/library/*versR-2.11.0/library/
  3. Répondez «non» aux invites vous demandant si vous pouvez écraser.
  4. Démarrer R 2.11.0
  5. Exécutez la commande R update.packages()

7

En ce qui concerne la solution donnée dans la question, il peut ne pas être facile d'exécuter votre ancienne version de R si vous avez déjà installé la nouvelle version. Dans ce cas, vous pouvez toujours réinstaller tous les packages manquants de la version précédente de R comme suit.

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

(Notez que l'argument de list.files()dans la première ligne de code doit être le chemin d'accès au répertoire de la bibliothèque de votre version R précédente, où se trouvent tous les dossiers de packages de la version précédente. Dans mon cas actuel, c'est le cas "/Library/Frameworks/R.framework/Versions/3.2/Resources/library". Ce sera différent si votre précédente version R n'est pas la 3.2, ou si vous êtes sous Windows.)

L' ifinstruction s'assure qu'un package n'est pas installé si

  • Il est déjà installé dans la nouvelle version R, ou
  • A été installé en tant que dépendance à partir d'un package installé dans une itération précédente de la forboucle.

Cela a résolu mon problème, merci! Cette question peut sembler un peu stupide, mais puis-je supprimer les anciennes bibliothèques?
m_c

4

Suite à la suggestion de Dirk, voici un code R pour le faire sous Windows: Comment mettre à jour facilement R sur Windows XP

Mise à jour (15.04.11): j'ai écrit un autre article sur le sujet, expliquant comment gérer les problèmes courants de la mise à niveau de R sur Windows 7


2
Pour les versions les plus récentes de R, Tal a un package appelé installrqui automatise ce processus (actuellement uniquement sur Windows) r-statistics.com/tag/installr ou github.com/talgalili/installr
Louis Maddox

1
Exécutez Rgui.exe de C: \ Program Files \ R \ R-3.6.0 \ bin \ i386 et écrire le code à la console: install.packages(installr); library(installr); updateR(TRUE). À la fin, [1] TRUEapparaît. Par l'excellent package de Galili, je suis passé de la R 3.6.0 à la R 3.6.1 très facilement. Merci Tal.
Erdogan CEVHER

2

Deux options:

  1. Implémentez ma réponse ici
  2. Si vous utilisez R sous Eclipse avec StatET, ouvrez Run Configurations , cliquez sur l' onglet Console et dans la zone appelée R snippet run after startup, ajoutez cette ligne avec votre choix de répertoire:.libPaths("C:/R/library")

1

Je suis sous Windows 8 et pour une raison étrange, je ne peux jamais installer de packages en utilisant mes connexions Internet.

Je l'installe généralement en utilisant le fichier .zip de CRAN.

Après je suis passé de R 3.2.5 à R 3.3.1.

J'ai simplement copié les packages de

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

Et puis j'ai redémarré la session R. A parfaitement fonctionné. Je n'ai pas vérifié si TOUS les packages fonctionnent correctement. Mais ceux que j'ai vérifiés fonctionnent parfaitement bien. J'espère que ce hack fonctionne pour tout le monde.

À votre santé.


1

La réponse acceptée pourrait fonctionner si vous avez de la prévoyance, mais je m'étais déjà débarrassé de l'ancienne version et je n'ai donc pas pu suivre ces instructions. Les étapes décrites ci-dessous ont fonctionné pour la mise à niveau OSX de 2.1 et 3.1.

MISE À JOUR: Pour obtenir le répertoire de votre version la plus récente (au lieu de taper 3.1 ou 3.2), vous pouvez utiliser les commandes ci-dessous. Le second se convertit directement en variable R, en sautant .et ..et .DS_Store, utilisez:

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

(Ajoutez |pbcopyà la fin pour le copier directement dans le presse-papiers de votre Mac)

Ensuite, dans R, vous pouvez coller cette variable générée. Une fois que cela est défini dans la nouvelle version de R, vous pouvez parcourir les packages installés à partir des instructions ci-dessus ...

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

0

pour moi, cette page est bonne https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ ou une autre option consiste simplement à installer le nouveau option et au final vous mettez, par exemple dans les fenêtres de mon pc

.libPaths (c ("D: /Documents/R/win-library/3.2", "C: / Program Files / R / R-3.2.3 / bibliothèque", "C: / Program Files / R / R-3.2 .0 / bibliothèque "," D: /Documents/R/win-library/2.15 ")

chaque chemin de la dernière version dans mon cas, je mets toujours le premier chemin est "D: /Documents/R/win-library/3.2" qui est corrigé, puis je mets l'autre car vous n'avez pas besoin de copier ou de déplacer des packages, dans mon avis appelle ça


0

linux+ bash+ debian+ aptutilisateurs:

  1. Si vous installez / mettez à niveau vers la dernière version de R, nous pouvons supposer que vous avez des rootautorisations. (Pas essentiel, rend simplement le processus beaucoup plus simple; par souci de cohérence, le script ci-dessous utilise sudopour toutes les installations.) Comme les Rpackages sont également installés par root, il est donc permis de les placer dans /usr/local/.

  2. L'appel curlci-dessous suppose que vous êtes déjà intéressé par la sidsortie de R, la toute dernière version instable (comme requis lors de la construction / vérification d'un Rpaquet) ie

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

    bien que cela puisse facilement être remplacé par une version stable récente, par exemple buster.

  3. Notez que je n'utilise pas de clé comme cela est généralement recommandé . Ce n'est pas indispensable, surtout si (comme dans le script qui suit) nous installons des packages en R lui-même ( Rscript -eci-dessous). De plus, ces clés ont tendance à se casser / changer toutes les quelques années. Ainsi, vous êtes bien entendu invités à ajouter la préface suivante au fichier R.shqui suit:

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

  4. Le arraydes Rpackages n'est clairement pas exhaustif mais donne quelques exemples que je trouve personnellement utiles. Une nouvelle installation / mise à jour avec le debianpaquet r-recommended, comme ci-dessous, devrait donner la dernière version de tous les paquets standard «recommandés» (par exemple survival). Je pense qu'il peut y avoir un léger décalage entre une version CRAN et une mise à jour du debianpackage concerné . Ainsi, vous souhaiterez peut-être en ajouter quelques-uns à la liste arrayci-dessous s'il Rest essentiel de disposer de la dernière version d'un package «recommandé» .

  5. Les debianpackages installés dans le processus ci-dessous ne sont également ni essentiels (pour l'utilisation r-base) ni exhaustifs, mais fournissent un non. des «add-ons» qui sont importants pour un non raisonnable. de Rpaquets.

Quoi qu'il en soit ... placez ce qui suit dans 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

Ensuite , l' exécuter, par exemple en supposant déjà dans le répertoire: source R.sh.

L'installation des packages (que ce soit debianou R) un par un dans une boucle à partir du shell est quelque peu inefficace, mais permet un traçage plus simple des erreurs, à mon humble avis. Peut prendre un certain temps selon le non. de Rpaquets, alors peut-être le plus simple à laisser fonctionner du jour au lendemain ...


1
Je ne sais pas pourquoi «survie» est dans cette liste de paquets supplémentaires. (Et il est fort possible que je trompe ce script bash.) C'est un paquet "recommandé" depuis ... pour toujours. Si vous n'installez pas tous les packages recommandés avec ce script, il doit être modifié pour ce faire. Pensez également que l'ensemble de paquets r-base-devel serait nécessaire pour quiconque utilise Linux. Et pourquoi ne pas ajouter le PPA de Michael Rutter?
IRTFM

Je vous remercie! Mis à jour à la lumière de vos commentaires utiles. D'accord, pas besoin d'installer systématiquement un package déjà présent r-recommended. 'r-base-devel' est connu sous le nom de r-base-dev( debianpackage) - était déjà inclus. Je ne suis pas opposé à l'utilisation d'une clé pour la sécurité (réponse mise à jour). Les séjours de réponse loin d'utiliser un PPA= Package Archives personnelles que celles - ci sont nécessairement dépendant d' une personne et donc potentiellement faillibles. Comme le dit Michael Rutter lui-même (2012): "Si vous avez utilisé CRAN, il n'y a aucune raison de passer au PPA, car les mêmes packages sont fournis aux deux endroits."
dardisco
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.