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

Ste*_*ini 5 r

从文档中不清楚如果在 install.packages 中指定了多个 repos 是什么行为。我的直觉告诉我它会尝试第一个 repo,如果找不到包,它会尝试第二个,依此类推。不幸的是,情况似乎并非如此。我看到的是只尝试了第一个,并返回了错误(因为 repo 不包含包)。与不同的条目相比,“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) 
Run Code Online (Sandbox Code Playgroud)

Nat*_*rth 0

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

\n\n

官方手册“R Installation and Administration”描述了存储库所需的内容

\n\n

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

\n\n
tools::write_PACKAGES(\n  "qs-cran/bin/macosx/el-capitan/contrib/3.5",\n  type = "mac.binary"\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
qs-cran/\n\xe2\x94\x94 bin/macosx/el-capitan/contrib/3.5/\n    \xe2\x94\x9c PACKAGES\n    \xe2\x94\x94 zizzio_1.0.0.zip\n
Run Code Online (Sandbox Code Playgroud)\n\n

从那时起,每当您添加、更改或删除包时,请使用:

\n\n
tools::update_PACKAGES(\n  "qs-cran/bin/macosx/el-capitan/contrib/3.5",\n  type = "mac.binary"\n)\n
Run Code Online (Sandbox Code Playgroud)\n