45 votes

Mise à jour automatique des paquets installés à partir de R-forge

J'ai récemment installé la R-2.12.0 à partir de la R-2.11.1 et j'ai mis à jour tous les paquets CRAN via :

update.packages(checkBuilt=TRUE, ask=FALSE)

Maintenant, je veux mettre à jour tous les paquets que j'ai installés à partir de R-forge, mais seulement s'ils ne sont pas disponibles sur CRAN . En d'autres termes, je ne peux pas simplement fuir :

update.packages(checkBuilt=TRUE, ask=FALSE, repos="http://r-forge.r-project.org")

parce qu'il installerait la version R-forge de l' survival par rapport à la version fournie avec R-2.12.0.

Je pourrais probablement utiliser une combinaison des informations de old.packages y packageStatus pour déterminer quels paquets n'existent que sur R-forge, mais je voulais savoir s'il existait un moyen plus simple avant de construire une solution personnalisée.

46voto

Sharpie Points 6291

Que dites-vous 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?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X