R包中的回退和可选依赖关系以CRAN方式打包?

时间:2018-01-15 16:00:52

标签: r dependencies cran

我想在我的包中添加一个回退依赖项。问题是我想要符合CRAN并且无法弄清楚如何正确地做到这一点。

更具体地说,我想使用data.table's fread / fwrite。除此之外,我不想拥有完整的data.table依赖。如果未安装data.table,我的套餐应该回归到使用标准read.csvwrite.csv

我已经看过这个类似的帖子:Proper way to handle optional package dependencies

并且还使用了类似于@Hadley在评论中建议的技术:

req <- require(data.table)
if(req){ 
   data.table::fwrite(...)
 } else {
    write.csv(...)     

  }

这确实有效,但在运行CHECK时我得到一个注意:

'library' or 'require' call to ‘data.table’ in package code. Please use :: or requireNamespace() instead.

这意味着我无法通过CRAN的主管......

处理此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:7)

正如文字所说:

  • 将您(过期)的来电替换为require(),将{1}改为requireNamespace()
  • 然后,在TRUE个案例中,调用包。
  • 我经常使用::来引用建议的包。

所以嘲笑这个(注意,未经测试)我会做

myreader <- function(file) {
    if (requireNamespace("data.table", quietly=TRUE)) {
       dat <- data.table::fread(file)
    } else {
       dat <- read.csv(file)
    }
    ## postprocess dat as needed
    dat
}

在GitHub上搜索对user:cran l=R yourTerm很有用,请尝试this one。我在许多包中使用了这个习惯用法。