构建 R 包时如何避免解析命令行参数?

How to avoid parsing command line arguments when building R package?

我正在开发一个包含命令行界面的 R 包。构建包时,我想避免解析命令行参数(构建标志),因为我的命令行参数解析器无法识别这些与构建相关的参数并产生错误。

为了解决这个问题,我目前正在使用一种方法,在尝试解析参数之前,我的构建标志被硬编码到 if 语句中:

if (length(commandArgs(trailingOnly = TRUE)) > 0 &&
        !(grepl("--no-multiarch", commandArgs(trailingOnly = TRUE)))) {
    argv <- GetCmdlineArguments()
    DoStuff(argv$parsed.argument)
}

我还没有尝试过的另一种方法包括将参数解析放在不同的 R 文件中,该文件通过 .Rbuildignore 构建时会被忽略。然而,这会导致不利的情况,即每个具有命令行界面的 R 文件都需要一个额外的文件。

是否有更优雅、更可靠的方法来检测包是否正在构建而不是由用户从命令行实际执行?

我不完全理解您要实现的目标,但请允许我提供一些背景信息:

  • 首先,所有 R 使用 通常来自 R 提示,而不是命令行
  • 因此,将只包含 R 函数等
  • 也就是说,命令行工作非常强大和流行
  • R 生态系统有来自 littlerRscriptr 两者都有助于命令行使用
  • 通常,我们会在 inst/scripts/inst/examples
  • 中发布使用这些前端的脚本
  • 所有这些脚本都可以使用众多包之一来解析命令行选项——我喜欢 docopt
  • 因此,我的 littler 包有 很多示例 使用 docopt

你能不能也这样做?