web-dev-qa-db-fra.com

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

Andrew Gelman a récemment déploré l'absence d'un processus de mise à niveau facile pour R (probablement plus pertinent sous Windows que sous Linux). Quelqu'un at-il un bon truc 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 est ce que j'ai utilisé récemment. D'abord, vous installez la nouvelle version, puis vous l'exécutez dans l'ancienne version:

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

Suivi de cela 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)
150
Shane

Juste pour être complet, il existe des moyens de vous éviter d’avoir ce problème. Comme Dirk l'a dit, sauvegardez vos paquets 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 .Library À l'aide de la fonction .libPaths Aussi

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

Cela placera ce chemin comme première valeur dans la variable .Library Et en fera la valeur par défaut.

Si vous souhaitez automatiser davantage cette opération, vous pouvez l'indiquer dans le fichier Rprofile.site, que vous trouverez dans le répertoire/etc/de votre construction R. Ensuite, il se chargera automatiquement à chaque chargement de R, et vous n’aurez plus à vous en soucier. Vous pouvez simplement installer et charger des packages à partir du répertoire spécifié.

Enfin, mon fichier Rprofile.site contient un petit code qui me permet de réinstaller tous les packages lorsque j'installe une nouvelle version. Il vous suffit de les lister avant vous passez à 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. Ceci met à jour la liste des paquets 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. Quoi qu'il en soit, je dois ajuster le site Rprofile.site (en utilisant des totaux contrastés, en ajoutant le code supplémentaire pour Tinn-R, ces choses-là), donc ce n'est pas vraiment un travail supplémentaire. Cela prend juste du temps supplémentaire d'installer tous les paquets à nouveau.

Ce dernier bit est équivalent à ce qui est donné dans la question initiale 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 paquets qui ne sont pas installés à partir de CRAN. Mais ce code est facilement extensible pour inclure ceux-là aussi.

70
Joris Meys

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()

Le meilleur moyen de le faire est d'utiliser le système RGui. Tous vos colis seront transférés dans le nouveau dossier et les anciens seront supprimés ou enregistrés (vous pouvez choisir). Ensuite, une fois que vous ouvrez RStudio à nouveau, il reconnaît immédiatement que vous utilisez une version mise à jour. Pour moi cela a fonctionné comme un charme,

Plus d'infos sur {installr} ici .

Simon

37
SJDS

Deux suggestions rapides:

  1. Utilisez les fichiers batchfiles de Gabor, qui sont supposés comprendre des outils d'aide, par exemple. cette relocalisation de bibliothèque en vrac. Avertissement: 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"
26
Dirk Eddelbuettel

La méthode suggérée ci-dessus ne fonctionnera pas complètement si vous avez des paquets 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 sous Windows (mise à niveau de 2.10.1 à 2.11.0):

  1. Installer la R-2.11.0
  2. Copier R-2.10.0/library/* Dans R-2.11.0/library/
  3. Répondez "non" aux invites vous demandant s'il est possible d'écraser.
  4. Start R 2.11.0
  5. Exécutez la commande R update.packages()
24
Kevin Wright

En ce qui concerne la solution donnée dans la question, il pourrait 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 précédente, où se trouvent tous les dossiers des packages de la version précédente. Dans mon cas actuel, this est "/Library/Frameworks/R.framework/Versions/3.2/Resources/library". Ce sera différent si votre version précédente de R n'est pas 3.2 ou si vous utilisez Windows.)

L'instruction if permet de s'assurer qu'un paquet est non installé si

  • Il est déjà installé dans la nouvelle version R, ou
  • A été installé en tant que dépendance d'un paquetage installé lors d'une itération précédente de la boucle for.
7
Raffaele Vacca

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

Mise à jour (15.04.11): J'ai écrit un autre article sur le sujet, expliquant comment traiter les problèmes courants liés à mise à niveau de R sous Windows 7

4
Tal Galili

Deux options:

  1. Mettre en œuvre ma réponse ici
  2. Si vous utilisez R sous Eclipse avec StatET, ouvrez Exécuter les configurations , cliquez sur Console et dans la boîte appelée R extrait exécuté après le démarrage ajoutez cette ligne avec le répertoire de votre choix: .libPaths("C:/R/library")
2
Fred

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

Je l’installe généralement à l’aide du fichier .Zip de CRAN.

Après être passé de R 3.2.5 à R 3.3.1.

J'ai simplement copié les paquets 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 paquets fonctionnaient bien. 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
Pragyaditya Das

La réponse acceptée pourrait fonctionner si vous avez une clairvoyance, 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 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, sautant . et .. et .DS_Store, utilisation:

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

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

Ensuite, dans R vous pouvez coller la 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)
1
beroe

linux + bash + debian + apt utilisateurs:

  1. Si vous installez/mettez à niveau vers la dernière version de R, nous pouvons supposer que vous disposez des autorisations root. . (Non essentiel, cela simplifie énormément le processus; pour des raisons de cohérence, le script ci-dessous utilise Sudo pour tous est installé.) Les packages R étant également installés. par root, il est donc permis de les placer dans /usr/local/.

  2. L’appel à curl ci-dessous suppose que vous êtes déjà intéressé par la version sid de R, le tout dernier instable version (comme requis lors de la construction/vérification d'un paquet R) c'est-à-dire.

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

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

  3. Notez que je suis pas en utilisant une touche telle quelle généralement recommandée . Ce n’est pas essentiel, en particulier si (comme dans le script qui suit) nous installons des paquets dansR lui-même (Rscript -e au dessous de). En outre, ces clés ont tendance à se briser/changer toutes les quelques années. Ainsi, vous pouvez bien sûr ajouter la préface suivante au fichier R.sh qui suit:

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

  4. Le array de R paquets n'est clairement pas exhaustif, mais donne quelques exemples que je trouve personnellement utiles. Une nouvelle installation/mise à niveau avec le package debianr-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 package debian correspondant. Ainsi, vous voudrez peut-être en ajouter quelques-unes au array ci-dessous si la dernière version d'un paquet 'recommandé' R est essentielle.

  5. Les packages debian installés dans le processus ci-dessous ne sont pas non plus essentiels (pour utiliser r-base) ni exhaustive, mais fournissez un no. des 'add-ons' qui sont importants pour un non raisonnable. de R paquets.

Quoi qu'il en soit ... placez le texte suivant 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

Puis exécutez-le, par exemple supposant déjà dans le répertoire: source R.sh.

L’installation de packages (que ce soit debian ou R) un par un dans une boucle de Shell est quelque peu inefficace, mais permet un traçage plus simple des erreurs, à mon humble avis, . Peut prendre du temps en fonction du non. de R paquets, alors peut-être plus simple de laisser courir du jour au lendemain ...

0
dardisco

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 la nouvelle option et, au final, à vous mettre, par exemple dans Windows dans mon pc

.libPaths (c ("D: /Documents/R/win-library/3.2", "C:/Fichiers de programme/R/R-3.2.3/bibliothèque", "C:/Fichiers de programme/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é et puis je mets l'autre parce que vous n'avez pas besoin de copier ou de déplacer des paquets mon sugest appelle juste ça

0
juanprimate