J'ai récemment installé R-2.12.0 à partir de R-2.11.1 et j'ai mis à jour tous les packages CRAN via:
update.packages(checkBuilt=TRUE, ask=FALSE)
Maintenant, je veux mettre à jour tous les packages que j'ai installés à partir de R-forge, mais niquement s'ils ne sont pas disponibles sur CRAN. En d'autres termes, je ne peux pas simplement exécuter:
update.packages(checkBuilt=TRUE, ask=FALSE, repos="http://r-forge.r-project.org")
car il installerait la version R-forge du package survival
sur la version fournie avec R-2.12.0.
Je pourrais probablement utiliser une combinaison des informations de old.packages
et packageStatus
pour déterminer quels paquets n'existent que sur R-forge, mais je voulais demander s'il y avait un moyen plus simple avant de créer une solution personnalisée.
Que dis-tu de ça:
# 1. Get the list of packages you have installed,
# use priority to exclude base and recommended packages.
# that may have been distributed with R.
pkgList <- installed.packages(priority='NA')[,'Package']
# 2. Find out which packages are on CRAN and R-Forge. Because
# of R-Forge build capacity is currently limiting the number of
# binaries available, it is queried for source packages only.
CRANpkgs <- available.packages(
contriburl=contrib.url('http://cran.r-project.org'))[,'Package']
forgePkgs <- available.packages(
contriburl=contrib.url('http://r-forge.r-project.org', type='source')
)[,'Package']
# 3. Calculate the set of packages which are installed on your machine,
# not on CRAN but also present on R-Force.
pkgsToUp <- intersect(setdiff(pkgList, CRANpkgs), forgePkgs)
# 4. Update the packages, using oldPkgs to restrict the list considered.
update.packages(checkBuilt=TRUE, ask=FALSE,
repos="http://r-forge.r-project.org",
oldPkgs=pkgsToUp)
# 5. Profit?