2010-10-19 15 views
45

recientemente he instalado R-2.12.0 de R-2.11.1 y he actualizado todos los paquetes a través de CRAN:actualizar automáticamente los paquetes instalados a partir de R-forjar

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

Ahora quiero actualizar todos los paquetes He instalado desde R-forge, pero solo si no están disponibles en CRAN. En otras palabras, no puedo simplemente ejecute:

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

porque sería instalar la versión R-fragua del paquete survival sobre la versión que viene con R-2.12.0.

Probablemente podría utilizar alguna combinación de la información de old.packages y packageStatus para determinar qué paquetes existen solo en R-forge, pero quería preguntar si había una manera más fácil antes de crear una solución personalizada.

Respuesta

47

¿Qué tal esto:

# 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? 
+0

En Mac tipo de uso = "fuente" en el último paso: por ejemplo, update.packages (checkBuilt = TRUE, ask = FALSE, repos = "http://r-forge.r-project.org", oldPkgs = pkgsToUp, type = "fuente") – Janvb

Cuestiones relacionadas