2017-08-16 89 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