我想为我的包添加一个后备依赖项。问题是我想做到符合 CRAN 标准,但不知道如何正确地做到这一点。
更具体地说,我想使用 data.table's fread / fwrite
。除此之外,我不想拥有完整的 data.table 依赖项。如果 data.table
没有安装,我的包应该回退到使用标准的 read.csv
和 write.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/