Beaucoup de réponses ci-dessus (et sur des doublons de cette question) se fondent sur la installed.packages
mauvaise forme. De la documentation:
Cela peut être lent lorsque des milliers de packages sont installés, donc ne l'utilisez pas pour savoir si un package nommé est installé (utilisez system.file ou find.package) ni pour savoir si un package est utilisable (appelez require et vérifiez le valeur de retour) ni pour trouver les détails d'un petit nombre de packages (utilisez packageDescription). Il doit lire plusieurs fichiers par package installé, ce qui sera lent sous Windows et sur certains systèmes de fichiers montés en réseau.
Ainsi, une meilleure approche consiste à tenter de charger le package à l'aide de require
et à installer si le chargement échoue ( require
retournera FALSE
s'il n'est pas trouvé). Je préfère cette implémentation:
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)
}
}
qui peut être utilisé comme ceci:
using("RCurl","ggplot2","jsonlite","magrittr")
De cette façon, il charge tous les packages, puis revient en arrière et installe tous les packages manquants (ce qui si vous le souhaitez, est un endroit pratique pour insérer une invite pour demander si l'utilisateur souhaite installer des packages). Au lieu d'appeler install.packages
séparément pour chaque paquet, il passe le vecteur entier des paquets désinstallés une seule fois.
Voici la même fonction mais avec une boîte de dialogue Windows qui demande si l'utilisateur souhaite installer les packages manquants
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)
.