Muitas das respostas acima (e duplicatas desta pergunta) dependem da installed.packages
má forma. A partir da documentação:
Isso pode ser lento quando milhares de pacotes estão instalados; portanto, não use isso para descobrir se um pacote nomeado está instalado (use system.file ou find.package) nem para descobrir se um pacote é utilizável (chame exigir e verifique o valor de retorno) nem para encontrar detalhes de um pequeno número de pacotes (use packageDescription). Ele precisa ler vários arquivos por pacote instalado, o que será lento no Windows e em alguns sistemas de arquivos montados em rede.
Portanto, uma abordagem melhor é tentar carregar o pacote usando ee require
instalando se o carregamento falhar ( require
retornará FALSE
se não for encontrado). Eu prefiro esta implementação:
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 pode ser usado assim:
using("RCurl","ggplot2","jsonlite","magrittr")
Dessa forma, ele carrega todos os pacotes, depois volta e instala todos os pacotes ausentes (que, se você quiser, é um local útil para inserir um prompt para perguntar se o usuário deseja instalar pacotes). Em vez de chamar install.packages
separadamente para cada pacote, ele passa o vetor inteiro de pacotes desinstalados apenas uma vez.
Aqui está a mesma função, mas com uma caixa de diálogo do Windows que pergunta se o usuário deseja instalar os pacotes ausentes
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)
.