Rất nhiều câu trả lời ở trên (và trên các bản sao của câu hỏi này) dựa vào installed.packages
đó là hình thức xấu. Từ tài liệu:
Điều này có thể bị chậm khi hàng ngàn gói được cài đặt, vì vậy đừng sử dụng gói này để tìm hiểu xem gói đã được cài đặt chưa (sử dụng system.file hoặc find.package) cũng như để tìm hiểu xem gói có thể sử dụng được không (yêu cầu cuộc gọi và kiểm tra giá trị trả về) cũng như không tìm thấy chi tiết của một số lượng nhỏ các gói (sử dụng gói Mô tả). Nó cần phải đọc một số tệp trên mỗi gói được cài đặt, sẽ chậm trên Windows và trên một số hệ thống tệp được gắn trên mạng.
Vì vậy, cách tiếp cận tốt hơn là thử tải gói bằng cách sử dụng require
và cài đặt nếu tải không thành công ( require
sẽ trả về FALSE
nếu không tìm thấy). Tôi thích thực hiện này:
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)
}
}
có thể được sử dụng như thế này:
using("RCurl","ggplot2","jsonlite","magrittr")
Bằng cách này, nó tải tất cả các gói, sau đó quay lại và cài đặt tất cả các gói bị thiếu (nếu bạn muốn, là một nơi thuận tiện để chèn một dấu nhắc để hỏi xem người dùng có muốn cài đặt gói không). Thay vì gọi install.packages
riêng cho từng gói, nó sẽ chuyển toàn bộ véc tơ của các gói đã gỡ cài đặt chỉ một lần.
Đây là chức năng tương tự nhưng với hộp thoại windows hỏi người dùng có muốn cài đặt các gói bị thiếu không
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)
.