r - R 中的回退和可选依赖项以 CRAN 方式打包?

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

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

最佳答案

正如文中所说:

  • 将您对 require() 的(过时的)调用替换为 requireNamespace()
  • 然后,在 TRUE 情况下,调用包。
  • 我经常使用 :: 来指代推荐的包。

  • 所以 mock 这个(并注意,未经测试)我会做
    myreader <- function(file) {
        if (requireNamespace("data.table", quietly=TRUE)) {
           dat <- data.table::fread(file)
        } else {
           dat <- read.csv(file)
        }
        ## postprocess dat as needed
        dat
    }
    

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

    关于r - R 中的回退和可选依赖项以 CRAN 方式打包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48266553/

    相关文章:

    r - 使用ReporteRs将lmer摘要信息输出到word

    r - 在ggplot中同时绘制水平和垂直点范围

    c# - 自动将 PackageReferences 添加到 NuGet 包

    r - CRAN 检查 rgdal 不可用于检查

    构建时R包: underscores added to RcppExports. R

    r - 使用 `$` 命名数据框列向量

    java - 'BanTransitiveDependencies failed' 背后的原因是什么?

    android - 依赖项 'android.arch.core:runtime' 具有不同版本的编译和运行时类路径

    r - CRAN 包存储库中是否有监视新 R 包的网站?

    r - 在 Dockerfile 中为 R 添加 CRAN 镜像/PPA