Muchas de las respuestas anteriores (y en duplicados de esta pregunta) dependen de installed.packages
cuál es una mala forma. De la documentación:
Esto puede ser lento cuando se instalan miles de paquetes, así que no lo use para averiguar si un paquete con nombre está instalado (use system.file o find.package) ni para averiguar si un paquete es utilizable (llame y solicite valor de retorno) ni para encontrar detalles de una pequeña cantidad de paquetes (use packageDescription). Necesita leer varios archivos por paquete instalado, lo que será lento en Windows y en algunos sistemas de archivos montados en red.
Por lo tanto, un mejor enfoque es intentar cargar el paquete usando require
e instalarlo si falla la carga ( require
volverá FALSE
si no se encuentra). Prefiero esta implementación:
using<-function(...) {
libs<-unlist(list(...))
req<-unlist(lapply(libs,require,character.only=TRUE))
need<-libs[req==FALSE]
if(length(need)>0){
install.packages(need)
lapply(need,require,character.only=TRUE)
}
}
que se puede usar así:
using("RCurl","ggplot2","jsonlite","magrittr")
De esta manera, carga todos los paquetes, luego regresa e instala todos los paquetes que faltan (que si lo desea, es un lugar útil para insertar un mensaje para preguntar si el usuario desea instalar paquetes). En lugar de llamar install.packages
por separado para cada paquete, pasa el vector completo de los paquetes desinstalados solo una vez.
Aquí está la misma función pero con un cuadro de diálogo de Windows que pregunta si el usuario desea instalar los paquetes faltantes
using<-function(...) {
libs<-unlist(list(...))
req<-unlist(lapply(libs,require,character.only=TRUE))
need<-libs[req==FALSE]
n<-length(need)
if(n>0){
libsmsg<-if(n>2) paste(paste(need[1:(n-1)],collapse=", "),",",sep="") else need[1]
print(libsmsg)
if(n>1){
libsmsg<-paste(libsmsg," and ", need[n],sep="")
}
libsmsg<-paste("The following packages could not be found: ",libsmsg,"\n\r\n\rInstall missing packages?",collapse="")
if(winDialog(type = c("yesno"), libsmsg)=="YES"){
install.packages(need)
lapply(need,require,character.only=TRUE)
}
}
}
R version 3.0.2 (2013-09-25) x86_64-w64-mingw32/x64 (64-bit)
.