R 中的回退和可选依赖项以 CRAN 方式打包?
Fallback and optional dependencies in R packages the CRAN way?
我想为我的包添加一个后备依赖项。问题是我想按照 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
种情况下,调用包。
- 我经常用
::
来指代建议包。
所以模拟这个(注意,未经测试)我会做
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。我在很多包中都使用了这个习语。
我想为我的包添加一个后备依赖项。问题是我想按照 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
种情况下,调用包。 - 我经常用
::
来指代建议包。
所以模拟这个(注意,未经测试)我会做
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。我在很多包中都使用了这个习语。