R包中的后备和可选依赖关系是CRAN方式吗?

Mat*_*ert 4 dependencies r cran

我想在我的包中添加一个回退依赖项.问题是我想要符合CRAN并且无法弄清楚如何正确地完成它.

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

我见过这个类似的线程:处理可选包依赖的正确方法

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

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

  }
Run Code Online (Sandbox Code Playgroud)

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

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

这意味着我不会通过CRAN的主管......

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

Dir*_*tel 9

正如文字所说:

  • require()用一个替换你的(过时的)呼叫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
}
Run Code Online (Sandbox Code Playgroud)

在GitHub上搜索是有用的,user:cran l=R yourTerm所以试试这个.我在许多包中使用了这个习惯用法.