什么决定了CRAN二进制兼容性?

4

CRAN提供了适用于Windows和macOS的软件包的二进制版本。但是,当在非官方CRAN R发行版上运行时,install.packages()将仅使用这些二进制版本。如果使用不同的R发行版(例如,在macOS上使用Homebrew或MacPorts)或自己从源代码编译R,则install.packages()将不会下载二进制文件,而是会从源代码编译所有软件包。

问题:

  • install.packages()为什么会拒绝从CRAN获取二进制文件,当在非官方R发行版上运行时?我认为这涉及到二进制兼容性的一些问题,我希望获得一些技术上的洞见来解释原因。
  • 二进制兼容性是如何进行验证的?install.packages()如何判断是否可以使用二进制文件?
  • 需要什么才能生产一个与CRAN二进制文件兼容并且能被install.packages()检测到兼容的单独的R发行版?

你能看到在这些不同的平台上 R.version$os 是什么吗? - Ben Bolker
你能使用例如 install.packages("dplyr", type = "mac.binary") 安装二进制文件吗?如果你在控制台中输入 getOption("pkgType"),会得到什么结果?如果你运行 options(pkgType = "both") 然后正常地执行 install.packages("dplyr"),这会给你提供二进制文件吗? - Allan Cameron
@BenBolker 是的,这是不同的,但这并不一定意味着install.packages()是如何做出决定的。在macOS上的CRAN R中,我看到darwin17.0,因为它是为macOS 10.13或更高版本编译的。在MacPorts的R中,我看到darwin18.7.0,因为那是我正在使用的macOS 10.14.6的标识符。 - Szabolcs
@AllanCameron type = "mac.binary" 安装二进制版本。getOption("pkgType")"source"。在设置 options(pkgType = "both") 后,install.packages() 会发出此错误:type == "both" can only be used on Windows or a CRAN build for macOS。这表明限制是有意的。 - Szabolcs
@Szabolcs,为什么你不能使用install.packages()type="mac.binary" - Allan Cameron
@AllanCameron 这可能是你想写的回答的一部分。 - Szabolcs
1个回答

4

?install.packages 文档中关于 type 参数的说明:

type 的可能值 (目前) 为 "source"、"mac.binary" 和 "win.binary":在支持时,也可以选择适当的二进制类型作为 "binary"。

type 的默认设置为 getOption("pkgType")。在非 CRAN 构建中,该选项似乎已默认设置为 "source",如果尝试将选项设置为 "both"(这将是 CRAN 构建中的默认设置),那么 install.packages 将发出警告。您可以将选项设置为 "mac.binary",或者通过使用 type 参数来绕过选项。

因此,要安装最新版本的 MacOS 二进制文件,比如 dplyr,您可以执行以下操作:

install.packages("dplyr", type = "mac.binary")

或者
options(pkgType = "mac.binary")

install.packages("dplyr")

注意,这也会安装已安装软件包的依赖项。

谢谢,这非常有帮助!可能值得一提的是,这将安装二进制文件不仅限于 dplyr,还包括其所有依赖项。 - Szabolcs
@Szabolcs 很好的观点 - 谢谢。已更新。 - Allan Cameron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接