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)
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.
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
Deux suggestions rapides:
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.
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"
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):
R-2.10.0/library/*
Dans R-2.11.0/library/
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 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
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:
.libPaths("C:/R/library")
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é.
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)
linux
+ bash
+ debian
+ apt
utilisateurs:
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/
.
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
.
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
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 debian
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 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.
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 ...
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