Viele der obigen Antworten (und Duplikate dieser Frage) hängen davon ab, installed.packages
welche Form schlecht ist. Aus der Dokumentation:
Dies kann langsam sein, wenn Tausende von Paketen installiert sind. Verwenden Sie diese Option also nicht, um herauszufinden, ob ein benanntes Paket installiert ist (verwenden Sie system.file oder find.package) oder um herauszufinden, ob ein Paket verwendbar ist (rufen Sie require auf und überprüfen Sie das Rückgabewert) noch um Details einer kleinen Anzahl von Paketen zu finden (verwenden Sie packageDescription). Es muss mehrere Dateien pro installiertem Paket lesen, was unter Windows und einigen im Netzwerk bereitgestellten Dateisystemen langsam ist.
Ein besserer Ansatz ist es also, zu versuchen, das Paket mit require
und zu laden und zu installieren, wenn das Laden fehlschlägt ( require
wird zurückgegeben, FALSE
wenn es nicht gefunden wird). Ich bevorzuge diese Implementierung:
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)
}
}
welches so verwendet werden kann:
using("RCurl","ggplot2","jsonlite","magrittr")
Auf diese Weise werden alle Pakete geladen, dann zurückgegangen und alle fehlenden Pakete installiert (wenn Sie möchten, können Sie eine Eingabeaufforderung einfügen, um zu fragen, ob der Benutzer Pakete installieren möchte). Anstatt anzurufeninstall.packages
jedes Paket separat der gesamte Vektor deinstallierter Pakete nur einmal übergeben.
Hier ist dieselbe Funktion, jedoch mit einem Windows-Dialogfeld, in dem Sie gefragt werden, ob der Benutzer die fehlenden Pakete installieren möchte
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)
.