是否可以在下载时为 R 包安装外部依赖项

Is it possible to install external dependencies for R package on download

我有一个 R 包,它对 github 上的 C 库有一定的依赖性,目前在回购协议中没有依赖性 C 库。

通常,我会从 GitHub 安装 R 包,如下所示:

install.packages("devtools")
library(devtools)
install_github("github_repo/package_name")

R 包使用的所有 C 代码自然位于子文件夹 package_name/src 内。但是我很困惑如何释放 R 包工作所需的 C 库依赖项。

根据 "Writing R Extensions"、https://cran.r-project.org/doc/manuals/r-release/R-exts.htmlk 中的文档,应列出这些依赖项:

"Dependencies external to the R system should be listed in the ‘SystemRequirements’ field, possibly amplified in a separate README file."

这是有道理的。我可以将如何安装这些 C 库依赖项放入 README 中,甚至可以将这些库放入 github 存储库(如果它们不是太大)。

然而,这很容易让人们下载变得一团糟,这就是为什么我喜欢 Docker 个文件,即在 Dockerfile 内,我会添加以下内容:

RUN apt-get update && apt-get install -y \
    make \
    clang \
    require_c_library1 \
    require_c_library2 \
    require_c_library3

是否可以在安装 R 包之前以这种方式加载这些 C 库依赖项(即 R CMD INSTALL 调用 R CMD SHLIB,它在 Makevars 中安装所有 C 代码和 C 依赖项)?

或者是 (1) 将每个 C 依赖项放入要在 devtools::install_github("github_repo/package_name") 下载和编译的 R 包中的唯一选项,或者 (2) 要求用户在 README 中安装所有这些依赖项,并希望他们做对了(不要没完没了地给我发电子邮件)?

这里可能有不明白的地方,请指正

tl;dr:我希望!

之前有相关的问题。从本质上讲,您希望(精心打造的)CRAN 依赖项(在定义明确的宇宙中工作)在主机操作系统中变得更加通用——其中有太多太多的变体。

以 XML、PostgreSQL、PNG 或 JPEG 的示例库为例。它们的名称(和版本)会因操作系统而异,所以遗憾的是,这真的很难。

[我确实有一个 RcppAPT 包,它允许您从 R 中查询 apt 的缓存,但它只解决流 'the other way' —— 当然只适用于一部分用户因为它对 Windows、macOS、RH/CentOS 等平台上的人没有用。 ]