install.packages() 从 R 3.1.2 到 R 3.2.1 的变化

Changes in install.packages() from R 3.1.2 to R 3.2.1

我正在 Windows 7 机器上工作,无法访问互联网。到目前为止,我通过在 //server/x/bin/windows/contrib/3.1 中创建二进制 CRAN 存储库的本地副本,然后 运行 write_PACKAGES("//server/x/bin/windows/contrib/3.1") 并最终在 [=17] 中设置 r["CRAN"]="file:////server/x";r["CRANextra"]=r["CRAN"]; 来解决丢失的互联网连接=].

但这从 R 3.2.1 开始就不再有效了。 install.packages的错误信息中的路径表示R正在寻找源码包:

Cannot open compressed file '//server/x/src/contrib/PACKAGES'

我以为 Windows 上的 R 只查找二进制包!

查看 3.1.2 和 3.2.1 的 install.packages 之间的差异,我可以看到不少变化。但是,该函数的源代码有500多行,这让我很难看出具体问题出在哪里。

我试过设置

options(install.packages.check.source="no")

并显式将 type="win.binary" 添加到 install.packages - 均未成功。

同样有趣的是

contrib.url(options("repos")$repos["CRAN"],type="win.binary")

给出了正确的路径 file:////server/x/bin/windows/contrib/3.2 但不知何故 install.packages(...,type="win.binary")...

所以我的问题是你们是否遇到过类似的问题?

如果没有,如果能指出我可能犯的错误,我将不胜感激。

我找到问题了。 R 3.2.1 新闻部分 (https://cran.r-project.org/src/base/NEWS) 说

  • The default for option pkgType on platforms using binary packages is now "both", so source packages will be tried if binary versions are not available or not up to date.

问题在于 RStudio 不直接调用 install.packages,而是通过一些其他函数,例如 .rs.callAs。在其中一个函数中, available.packages() 被调用时没有任何参数。因此它通过 getOption("pkgType") 确定参数 type。但是从 R 3.2.1 开始,现在是 "both" 而不是 R 3.1.2 中的 "win.binary"

该问题的快速解决方法是添加

options(pkgType="win.binary")

yourRinstallpath/etc/Rprofile.site