【问题标题】:Fallback and optional dependencies in R packages the CRAN way?R 中的后备和可选依赖项以 CRAN 方式打包?
【发布时间】:2018-01-15 16:00:51
【问题描述】:

我想为我的包添加一个后备依赖项。问题是我想做它符合 CRAN 并且无法弄清楚如何正确地做到这一点。

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

我见过类似的帖子:Proper way to handle optional package dependencies

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

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 的主管...

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

【问题讨论】:

    标签: r dependencies cran


    【解决方案1】:

    正如文中所说:

    • 将您对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
    }
    

    在 GitHub 上搜索user:cran l=R yourTerm 很有用,所以试试this one。我在很多包中都使用了这个成语。

    【讨论】:

    • 整洁。我确实首先关注了该消息,但在输入一个乱码包名称进行测试时被“错误”消息分散了注意力。所以,这个答案中有两件事对我有帮助:1. quietly = TRUE 2. github 搜索提示。
    • 德纳达。感谢您在我留下的代码 riff 中找到缺失的括号。
    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多