Дуже багато відповідей вище (і на дублікати цього питання) покладаються на те, installed.packages
що це погана форма. З документації:
Це може бути повільним, коли встановлено тисячі пакетів, тому не використовуйте це, щоб дізнатися, чи встановлений іменований пакет (використовуйте system.file або find.package), а також щоб дізнатись, чи є пакет корисним (вимагайте дзвінка та перевірте прапорець повернути значення), ні знайти деталі невеликої кількості пакунків (використовуйте packageDescription). Потрібно прочитати кілька файлів на встановлений пакет, який буде повільним в Windows та на деяких мережевих файлових системах.
Отже, кращим підходом є спроба завантажити пакет за допомогою require
та встановлення, якщо завантаження не вдасться ( require
повернеться, FALSE
якщо його не знайдено). Я віддаю перевагу цій реалізації:
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)
}
}
які можна використовувати так:
using("RCurl","ggplot2","jsonlite","magrittr")
Таким чином він завантажує всі пакунки, потім повертається назад і встановлює всі відсутні пакети (що, якщо ви хочете, це зручне місце для вставки підказки, щоб запитати, чи хоче користувач встановити пакунки). Замість виклику install.packages
окремо для кожного пакету він передає весь вектор видалених пакетів лише один раз.
Ось така ж функція, але з діалоговим вікном Windows, яке запитує, чи хоче користувач встановити відсутні пакети
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)
.