题
以下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)有没有你看看 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)如果一个包裹没有通过'R CMD检查'Linux和窗户,它不得上载到CRAN.因此,工作已经完成。
b)获得一切都取决于在你是工作太为你会看到的。我们这样做是为cran2deb这是在 http://debian.cran.r-project.org (它不会完全成熟的软件包建筑,这不仅仅是安装).我们得到关于2050年的2150包建造的。有一些我们拒绝建立,因为许可证,几个我们不能因为缺少头或库和一些我们无法建立,因为他们需要,例如使用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")
不隶属于 StackOverflow