2017-08-16 30 views
1

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

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

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

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

是否有更优雅和稳健的方式来检测程序包是否正在构建,而不是从用户的命令行实际执行?

回答

1

我不完全理解你想实现什么,但让我提供一些背景:

  • 第一关,所有的R使用一般是从R提示,而不是命令行
  • 作为这样,将只包含每R里面的函数等
  • 这么说,命令行工作是非常强大的和流行
  • 将R生态系统既具有Rscriptlittler两者便于命令行使用
  • 通常r,我们的船使用的脚本,这些前端的inst/scripts/inst/examples
  • 所有这些脚本可以使用许多包的一个解析命令行选项 - 我,我littler包已使用lots of examplesdocopt

你能不能只是做同样的青睐docopt

  • 结果?

  • +0

    谢谢。我已经在做几乎相同了。我通过'Rscript'从Python程序中调用包的R脚本,被调用的R脚本通过['argparser'](https://cran.r-project.org/package=argparser)执行参数解析。总结一下,我应该将参数解析分离到位于'inst/scripts /'下的文件吗? – tuomastik

    +0

    在“inst/scripts /”下移动命令行参数解析解决了问题,并使一切变得清晰。非常感激。 – tuomastik