簡體   English   中英

安裝尚未安裝的所有CRAN包?

[英]Installing all CRAN packages that are not already installed?

以下R命令將安裝所有CRAN包:

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

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

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

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

坦率地說,我認為這是艱苦的工作......它會持續數天,甚至數周(取決於資源),但這里是代碼(我只是喜歡做一些瑣碎的事情):

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

我仍然不明白為什么你這樣做,但是,嘿......有些事情本來就不應該......最讓我感到驚訝的是你已經回答了自己的問題! 你得到了你需要的東西,這取決於你把事情放在一起......我們錯過了這一點嗎? 你還有別的想法嗎?!?

1)你為什么要那樣做? 他們有超過3500 (截至2012年2月)?

2)您是否看過CRAN任務視圖和允許您從給定任務安裝軟件包的ctv軟件包?

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 check”,則不會上傳到CRAN。 這樣的工作就完成了。

b)獲得所有取決於你最終的工作也是如你所見。 我們為http://debian.cran.r-project.org (它做了完整的Debian軟件包構建,而不僅僅是安裝)的cran2deb做了這個。 在2150個包中,我們得到了大約2050個。 有一些我們拒絕建立因為許可證,一些我們不能因為缺少標題或庫而我們無法構建因為他們需要例如BioConductor包。

輸入此命令,然后將自動安裝所有包:

install.packages(available.packages()[,1])

我已經測試了這個並且它有效

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

問候

如果你使用更好:

    check.and.install.Package<-function(package_name){
        if(!package_name%in%installed.packages()){
           install.packages(package_name)
        }
     }

調用該函數並檢查是否安裝了所需的包:

    check.and.install.Package("pkgName")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM