2010-01-30 43 views
12

Các lệnh R sau sẽ cài đặt tất cả các gói Cran:Cài đặt tất cả các gói CRAN chưa được cài đặt?

availablePackages <- available.packages()[,1] 
install.packages(availablePackages) 

Và lệnh sau đây sẽ liệt kê tất cả các gói cài đặt:

installedPackages <- .packages(all.available = TRUE) 

Câu hỏi của tôi là: Làm thế nào để hướng dẫn R để cài đặt tất cả cran gói chưa được cài đặt?

+1

Một trường hợp sử dụng đơn giản là thiết lập một máy tính xách tay cho một nhà phân tích khác, những người có thể đang làm việc ngoại tuyến. Thay vì cố gắng dự đoán những gói nào họ sẽ sử dụng, chỉ cần cài đặt tất cả. Bộ phận của tôi có cách tiếp cận này khi cấu hình máy tính xách tay của các nhà phân tích. – fmark

+1

'setdiff (chữ cái, chữ cái [5:15])' – baptiste

Trả lời

16

Thẳng thắn mà nói, tôi nghĩ rằng đó là công việc khó nhọc ... nó sẽ kéo dài trong nhiều ngày, thậm chí cả tuần (tùy thuộc vào nguồn lực), nhưng đây là mã (Tôi chỉ thích làm những việc tầm thường):

# get names of installed packages 
packs <- installed.packages() 
exc <- names(packs[,'Package']) 

# get available package names 
av <- names(available.packages()[,1]) 

# create loooong string 
ins <- av[!av %in% exc] 
install.packages(ins) 

tôi vẫn không hiểu tại sao bạn làm điều này, nhưng, này ... một số thứ không có nghĩa là .... Điều kỳ diệu nhất của tôi là bạn đã trả lời câu hỏi của chính mình! Bạn có những gì bạn cần, và bạn chỉ cần đặt mọi thứ lại với nhau ... Chúng ta có bị thiếu điểm không? Bạn có cái gì khác trong tâm trí?!?

12

1) Tại sao bạn muốn thực hiện điều đó? Có trên 3500 (tính đến tháng 2 năm 2012) của chúng?

2) Bạn có xem CRAN Task Views và gói ctv cho phép bạn cài đặt gói từ một tác vụ nhất định không?

3) Bạn đậm đối mặt câu hỏi là một truy vấn lập chỉ mục đơn giản bạn có thể làm bằng tay (và bên cạnh đó, cũng thấy help(sets))

R> available <- LETTERS     # a simple set 
R> installed <- LETTERS[c(1:10, 15:26)] # a simple subset 
R> available[ ! available %in% installed ] 
[1] "K" "L" "M" "N" 
R> 

Edit: để phản ứng lại theo dõi của bạn:

a) Nếu gói không vượt qua 'kiểm tra R CMD' trên Linux và Windows, gói này không được tải lên CRAN. Vì vậy, công việc đó được thực hiện.

b) Bắt tất cả phụ thuộc vào cuối bạn cũng hoạt động như bạn sẽ thấy. Chúng tôi đã làm điều đó cho cran2deb là tại http://debian.cran.r-project.org (mà không xây dựng gói Debian đầy đủ mà là nhiều hơn là chỉ cần cài đặt). Chúng tôi nhận được khoảng 2050 trong số 2150 gói được xây dựng. Có một vài người chúng tôi từ chối xây dựng vì giấy phép, một vài chúng tôi không thể vì thiếu tiêu đề hoặc libs và một số ít chúng tôi không thể xây dựng vì họ cần ví dụ: Gói BioConductor.

+0

Tôi muốn đảm bảo hệ thống của mình có tất cả các phụ thuộc đúng, và tôi đang thử nghiệm bằng cách cố gắng xây dựng toàn bộ CRAN :-) CRAN có chứa nhiều gói bị hỏng hay không mà tôi mong đợi sẽ không xây dựng? – knorv

+0

Có một vài điều bạn nên mong đợi sẽ không xây dựng nếu bạn không cài đặt thư viện ở những nơi tiêu chuẩn. rgdal ví dụ giả định GDAL được cài đặt ở đâu đó mà kịch bản cấu hình có thể tìm thấy. Nếu bạn đã cài đặt nó ở một vị trí không chuẩn, bạn sẽ phải trỏ thủ công R CMD INSTALL đến đúng vị trí. – Sharpie

+0

@Dirk "Hơn hai ngàn" vẫn là một ước tính hợp lệ, nhưng tôi, umm, đã tự do giảm số dư. – Iterator

2

loại lệnh này và sau đó tất cả các gói sẽ được cài đặt tự động:

 >install.packages(available.packages()[,1]) 
+3

cách này cải thiện trên bất kỳ câu trả lời nào trước đây ?? –

+1

Nếu điều này hoạt động, nó sạch hơn – CodeGuyRoss

+1

Nhược điểm của phương pháp này là phiên của bạn có thể gặp phải một vấn đề tại một số điểm và kết thúc. Sử dụng cách tiếp cận của a3xa có nghĩa là mỗi khi bạn chạy mã, nó có ít gói để cài đặt hơn lần cuối cùng bạn cố gắng chạy nó. –

0

Tôi đã thử nghiệm điều này và nó hoạt động

availablePackages=available.packages() 
availablePackages<-as.vector(availablePackages[,1]) 
installedPackages=.packages(all.available = TRUE) 
missedPackages<-setdiff(availablePackages, installedPackages) 
for (i in 1:length(missedPackages)) 
{ 
pkgName <- missedPackages[i] 
install.packages(pkgName) 
} 
print("END") 

Trân

+0

mất bao lâu? – OganM

Các vấn đề liên quan