2010-01-30 160 views
12

下面的R命令將安裝所有CRAN軟件包:安裝所有尚未安裝的CRAN軟件包?

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

而下面的命令將列出所有已安裝的軟件包:

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

我的問題是:如何指導R鍵安裝所有CRAN尚未安裝的軟件包?

+1

另一個簡單的例子是建立一個筆記本電腦給另一位分析師,他可能正在離線工作而不是試圖預測他們將使用哪些軟件包,只需安裝它們。配置分析筆記本電腦時,我的部門採取這種方法。 – fmark 2012-05-25 02:15:47

+1

'setdiff(letters,letters [5:15])' – baptiste 2014-03-16 11:38:50

回答

16

坦率地說,我認爲這是艱苦的工作......這將持續,甚至幾個星期(取決於資源)天,但這裏的代碼(我只是喜歡做瑣碎的事情):

# 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) 

我仍然不要明白你爲什麼要這樣做,但是,嘿...有些事情並不意味着...... 最讓我感到奇怪的是你已經回答了你自己的問題!你得到了你需要的東西,並且這取決於你把東西放在一起... 我們是否錯過了這一點?你有沒有別的想法?!?

12

1)你爲什麼要這樣做?其中有超過3500(截至2012年2月)?

2)您是否看過CRAN Task Viewsctv軟件包,它允許您從給定任務安裝軟件包?

3)您黑體的問題是一個簡單的索引查詢,您可以自己動手完成(而除此之外,還看到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> 

編輯:響應您的後續:

a)如果軟件包在Linux和Windows上未通過'R CMD檢查',則不會上傳到CRAN。這樣工作就完成了。 b)讓你的一切都取決於你的結局,你也會看到。我們爲(它完成了不僅僅是安裝的Debian軟件包構建)提供了cran2deb。我們在建立的2150個軟件包中獲得了大約2050個。有一些我們拒絕建立,因爲許可證,有些我們不能,因爲缺少標題或庫,還有一些我們無法構建,因爲它們需要BioConductor軟件包。

+0

我想確保我的系統具有所有正確的依賴關係,並且我正在通過嘗試構建整個CRAN來測試它:-) CRAN是否包含許多破損的包我應該期望不會構建? – knorv 2010-01-30 20:03:50

+0

如果您沒有在標準位置安裝庫,那麼您應該期望有一些內容不會生成。例如,rgdal假設GDAL安裝在配置腳本可以找到的某處。如果您將它安裝在非標準位置,則必須手動將R CMD INSTALL指向正確的位置。 – Sharpie 2010-02-01 04:27:52

+0

@Dirk「超過兩千」仍然是一個有效的估計,但我,呃,採取了減少殘餘的自由。 – Iterator 2012-02-08 13:57:09

2

鍵入以下命令,然後將所有軟件包將被自動安裝:

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

這對以前的任何答案都有哪些改進? – 2014-03-16 03:19:19

+1

如果這樣做,它更清潔 – CodeGuyRoss 2016-10-26 18:11:19

+1

這種方法的缺點是,你的會議可能會在某個時候遇到問題並結束。使用aL3xa的方法意味着,每次運行代碼時,與上次運行代碼時相比,安裝的軟件包要少。 – 2016-12-17 20:14:03

0

我測試過這一點,它的工作原理

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") 

問候

+0

需要多長時間? – OganM 2018-02-02 01:13:45