从文档中不清楚如果在 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)
我认为你的问题是你的本地存储库没有文件PACKAGES。存储库中包含包的每个目录都必须包含此文件,因为 R 通过它来知道可用的内容。因此,R 首先尝试该存储库,当它需要的文件不存在时遇到错误,并在查看下一个存储库之前停止。
官方手册“R Installation and Administration”描述了存储库所需的内容。
\n\n您可以PACKAGES使用以下命令创建文件:
tools::write_PACKAGES(\n "qs-cran/bin/macosx/el-capitan/contrib/3.5",\n type = "mac.binary"\n)\nRun Code Online (Sandbox Code Playgroud)\n\n之后,您的存储库应如下所示:
\n\nqs-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\nRun Code Online (Sandbox Code Playgroud)\n\n从那时起,每当您添加、更改或删除包时,请使用:
\n\ntools::update_PACKAGES(\n "qs-cran/bin/macosx/el-capitan/contrib/3.5",\n type = "mac.binary"\n)\nRun Code Online (Sandbox Code Playgroud)\n