2010-01-30 22 views
12

Los siguientes comandos R instalarán todos los paquetes CRAN:¿Instalando todos los paquetes CRAN que aún no están instalados?

availablePackages <- available.packages()[,1] 
install.packages(availablePackages) 

Y el siguiente comando mostrará una lista de todos los paquetes instalados:

installedPackages <- .packages(all.available = TRUE) 

Mi pregunta es: ¿Cómo Instruir R para instalar todo el CRAN paquetes que aún no están instalados?

+1

Otro caso de uso sencillo es la creación de una computadora portátil a otro analista, que puede estar trabajando fuera de línea. En lugar de tratar de anticipar qué paquetes usarán, simplemente instálelos. Mi departamento toma este enfoque al configurar las computadoras portátiles de los analistas. – fmark

+1

'setdiff (letras, letras [5:15])' – baptiste

Respuesta

16

Francamente, creo que es trabajo minucioso ... sería durar varios días, incluso semanas (dependiendo de los recursos), pero aquí está el código (que disfruto haciendo cosas triviales):

# get names of installed packages 
packs <- installed.packages() 
exc <- names(packs[,'Package']) 

# get available package names 
av <- names(available.packages()[,1]) 

# create loooong string 
ins <- av[!av %in% exc] 
install.packages(ins) 

todavía no entiendo por qué estás haciendo esto, pero, oye ... algunas cosas simplemente no deberían ser ... ¡Lo que más me maravilla es el hecho de que ya has respondido tu propia pregunta! Obtuvo lo que necesitaba, y depende de usted armar las cosas ... ¿Nos falta el punto? ¿Tenías algo más en mente?

12

1) ¿Por qué querrías hacer eso? Hay más de 3500 (a partir de febrero de 2012) de ellos?

2) ¿Has mirado CRAN Task Views y el paquete ctv que te permite instalar paquetes de una tarea determinada?

3) Usted negrita pregunta es una consulta de indexación simple que se puede hacer a mano (y además de eso, también ver help(sets))

R> available <- LETTERS     # a simple set 
R> installed <- LETTERS[c(1:10, 15:26)] # a simple subset 
R> available[ ! available %in% installed ] 
[1] "K" "L" "M" "N" 
R> 

Editar: en respuesta a su seguimiento:

a) Si un paquete no pasa 'R CMD Check' en Linux y Windows, no se carga en CRAN. Entonces ese trabajo está hecho.

b) Obtener todo depende de su fin es el trabajo también como se verá. Lo hicimos para cran2deb que está en http://debian.cran.r-project.org (que hace la construcción de paquetes de Debian completa que es más que la instalación). Obtenemos alrededor de 2050 de 2150 paquetes construidos. Hay algunos que rechazamos construir debido a la licencia, algunos no podemos debido a la falta de encabezados o libs y algunos que no podemos construir porque necesitan, p. Paquetes BioConductor.

+0

Quiero asegurarme de que mi sistema tenga todas las dependencias correctas, y lo estoy probando al tratar de construir todo el CRAN :-) ¿Tiene CRAN muchos paquetes rotos? que debería esperar que no se construya? – knorv

+0

Hay algunas de las que debe esperar que no se compilarán si no tiene bibliotecas instaladas en lugares estándar. rgdal, por ejemplo, asume que GDAL está instalado en algún lugar que configure script puede encontrar. Si lo tiene instalado en una ubicación no estándar, deberá señalar manualmente R CMD INSTALAR en el lugar correcto. – Sharpie

+0

@Dirk "Más de dos mil" sigue siendo una estimación válida, pero yo, umm, me tomé la libertad de reducir el residuo. – Iterator

2

tipo este comando y luego todos los paquetes se instalarán automáticamente:

 >install.packages(available.packages()[,1]) 
+3

¿cómo mejora esto en cualquiera de las respuestas anteriores? –

+1

Si esto funciona, su limpiador – CodeGuyRoss

+1

La desventaja de este enfoque es que su sesión puede encontrar un problema en algún punto y finalizar. Usar el enfoque de aL3xa significa que cada vez que ejecuta el código tiene menos paquetes para instalar que la última vez que intentó ejecutarlo. –

0

He probado esto y funciona

availablePackages=available.packages() 
availablePackages<-as.vector(availablePackages[,1]) 
installedPackages=.packages(all.available = TRUE) 
missedPackages<-setdiff(availablePackages, installedPackages) 
for (i in 1:length(missedPackages)) 
{ 
pkgName <- missedPackages[i] 
install.packages(pkgName) 
} 
print("END") 

Saludos

+0

¿cuánto tiempo tomó? – OganM

Cuestiones relacionadas