Question

Andrew Gelman a récemment déploré le manque de facilité processus de mise à niveau 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 par-dessus?

Cette suggestion était contenue dans les commentaires et c’est ce que j’utilise depuis peu. 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 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)
Était-ce utile?

La solution

Juste pour être complet, il existe quelques 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")

Ceci 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 le spécifier 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 répertorier 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. 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, etc.), de sorte que ce n'est pas vraiment un travail supplémentaire. Cela prend juste du temps supplémentaire pour 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 me soucier de l'installation du " installé " liste 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 également ceux-là.

Autres conseils

Ceci 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 consiste à utiliser le système RGui. Tous vos paquets 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'informations sur {installr} ici .

Simon

Deux suggestions rapides:

  1. Utilisez les fichiers de traitement par lots 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:

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

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 sous Windows (mise à niveau de 2.10.1 à 2.11.0):

  1. Installer la R-2.11.0
  2. Copiez R-2.10.0 / bibliothèque / * dans R-2.11.0 / bibliothèque /
  3. Répondre " no " aux invites vous demandant s'il est correct d'écraser.
  4. Démarrer R 2.11.0
  5. Exécutez la commande R update.packages ()

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 la manière suivante.

# 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 pour votre version précédente de R, où tous les dossiers des packages de la version précédente Dans mon cas actuel, il s’agit de "/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 êtes sous Windows.)

L'instruction if permet de s'assurer qu'un package 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 package installé lors d'une précédente itération de la boucle for .

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

Deux options:

  1. Mettre en œuvre ma réponse ici
  2. Si vous utilisez R sous Eclipse avec StatET, ouvrez Configurations d'exécution , cliquez sur l'onglet Console et dans la zone intitulée R extrait exécuté après le démarrage ajoutez cette ligne avec votre choix de répertoire: .libPaths ("C: / R / library")

Je suis sous Windows 8 et, pour une raison étrange, je ne peux jamais installer de packages à l'aide de 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 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 paquets fonctionnaient bien. Mais ceux que j’ai vérifiés fonctionnent parfaitement. J'espère que ce hack fonctionne pour tout le monde.

A bientôt.

La réponse acceptée fonctionnera peut-être si vous êtes prévoyant, mais je m'étais déjà débarrassé de l'ancienne version et je ne pouvais donc pas suivre ces instructions. Les étapes décrites ci-dessous ont fonctionné pour la mise à niveau OSX 2.1 et 3.1.

UPDATED: 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 ignorant . 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 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)

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 la mettez, par exemple dans Windows dans 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 fixe et puis je mets l'autre parce que vous n'avez pas besoin de copier ou de déplacer les paquets, dans mon résumé appelez-le simplement

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 racine . (Non essentiel, cela simplifie énormément le processus; pour des raisons de cohérence, le script ci-dessous utilise sudo pour toutes les installations.) Comme les paquets R sont é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 , la toute dernière version instable (comme requis lors de la création / vérification d'un package R ), c.-à-d.

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

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

  3. Notez que je n’utilise pas de clé comme généralement recommandé . Ce n'est pas essentiel, en particulier si (comme dans le script ci-après), nous installons les packages dans R lui-même ( Rscript -e ci-dessous). 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 tableau des R packages n'est clairement pas exhaustif mais donne quelques exemples que je trouve personnellement utiles. Une nouvelle installation / mise à niveau avec le paquet debian r-recommandé , comme indiqué ci-dessous, devrait fournir la dernière version de tous les packages standard "recommandés" (par exemple, survival ). Je pense qu’il peut y avoir un léger décalage entre une publication CRAN et une mise à jour du paquet debian correspondant. Ainsi, vous voudrez peut-être en ajouter quelques-unes au tableau ci-dessous si la dernière version d'un paquet R est essentielle.

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

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, exécutez-le, par exemple. en 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 à partir d'un shell est quelque peu inefficace, mais permet une simplification traçage des erreurs, IMHO. Peut prendre un peu de temps en fonction du non. des paquets R , alors peut-être plus simple de laisser courir du jour au lendemain ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top