以下 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 检查”,它就不会被上传到 CRAN。这样就完成了这项工作。
b) 正如您将看到的,一切都取决于您的工作。我们为http://debian.cran.r-project.org上的 cran2deb 做了这件事(它进行了全面的 Debian 软件包构建,而不仅仅是安装)。我们从构建的 2150 个软件包中得到了大约 2050 个。有一些我们因为许可证而拒绝构建,一些我们因为缺少头文件或库而无法构建,还有一些我们无法构建,因为它们需要例如 BioConductor 包。
键入此命令,然后将自动安装所有软件包:
install.packages(available.packages()[,1])
如果你使用更好:
check.and.install.Package<-function(package_name){
if(!package_name%in%installed.packages()){
install.packages(package_name)
}
}
调用该函数并检查是否安装了所需的包:
check.and.install.Package("pkgName")
我已经对此进行了测试,并且可以正常工作
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")
问候
根据我的经验,一次安装所有 R 包是不明智的!即使您不调用(使用库函数)所有这些包,只需坐在主目录中,它们也会减慢您的 R 工作室。至少我的情况就是这样。