如果指定了多个存储库,install.packages 的行为是什么?



从文档中不清楚如果在install.packages中指定了多个存储库,则行为是什么。我的直觉告诉我,它会尝试第一个存储库,如果没有找到包,它会尝试第二个,依此类推。不幸的是,情况似乎并非如此。我看到的是只尝试了第一个,并返回了一个错误(因为存储库不包含包(。与其他条目相比,如何处理"CRAN"条目也缺乏明确性。

我想要的是一个具有我自己的软件包(首先指定(的本地 CRAN,以及具有较大软件包集(第二个指定(的全局 CRAN,并且能够从本地安装,除非找不到软件包(在这种情况下,它将回退到全局(

这是我得到的错误

> setRepositories(graphics = FALSE, ind=NULL, addURLs=c(ciccio="file:qs-cran", CRAN="https://mran.microsoft.com/snapshot/2018-08-01"))
> install.packages("zizzio")
Error in read.dcf(file = tmpf) : cannot open the connection
In addition: Warning messages:
1: package ‘zizzio’ is not available (for R version 3.5.3) 
2: In read.dcf(file = tmpf) :
cannot open compressed file 'qs-cran/bin/macosx/el-capitan/contrib/3.5/PACKAGES', probable reason 'No such file or directory'
> install.packages("zizzio", type="source")
Warning message:
package ‘zizzio’ is not available (for R version 3.5.3) 

我认为您的问题是您的本地存储库没有PACKAGES文件。存储库中具有包的每个目录都必须具有此文件,因为这是 R 知道可用内容的方式。因此,R 首先尝试该存储库,当它需要的文件不存在时遇到错误,并在查看下一个存储库之前停止。

官方手册"R 安装和管理"描述了存储库所需的内容。

您可以使用以下命令创建PACKAGES文件:

tools::write_PACKAGES(
"qs-cran/bin/macosx/el-capitan/contrib/3.5",
type = "mac.binary"
)

之后,您的存储库应如下所示:

qs-cran/
└ bin/macosx/el-capitan/contrib/3.5/
├ PACKAGES
└ zizzio_1.0.0.zip

从那时起,无论何时添加、更改或删除包,都可以使用:

tools::update_PACKAGES(
"qs-cran/bin/macosx/el-capitan/contrib/3.5",
type = "mac.binary"
)

最新更新