Muchas de las respuestas anteriores (y en duplicados de esta pregunta) dependen de installed.packagescuá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 requiree instalarlo si falla la carga ( requirevolverá FALSEsi 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.packagespor 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).