Banyak jawaban di atas (dan duplikat dari pertanyaan ini) bergantung pada installed.packages
bentuk mana yang buruk. Dari dokumentasi:
Ini bisa lambat ketika ribuan paket diinstal, jadi jangan gunakan ini untuk mencari tahu apakah paket bernama diinstal (gunakan system.file atau find.package) atau untuk mengetahui apakah suatu paket dapat digunakan (panggilan membutuhkan dan periksa nilai balik) atau untuk menemukan rincian sejumlah kecil paket (gunakan packageDescription). Perlu membaca beberapa file per paket yang diinstal, yang akan lambat pada Windows dan pada beberapa sistem file yang dipasang di jaringan.
Jadi, pendekatan yang lebih baik adalah mencoba memuat paket menggunakan require
dan menginstal jika pemuatan gagal ( require
akan kembali FALSE
jika tidak ditemukan). Saya lebih suka implementasi ini:
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)
}
}
yang bisa digunakan seperti ini:
using("RCurl","ggplot2","jsonlite","magrittr")
Dengan cara ini memuat semua paket, lalu kembali dan menginstal semua paket yang hilang (yang jika Anda mau, adalah tempat yang berguna untuk memasukkan prompt untuk menanyakan apakah pengguna ingin menginstal paket). Alih-alih memanggil install.packages
secara terpisah untuk setiap paket, ia hanya mengirimkan seluruh vektor paket yang dihapus instalasinya sekali saja.
Berikut fungsi yang sama tetapi dengan dialog windows yang menanyakan apakah pengguna ingin menginstal paket yang hilang
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)
.