我想在我的包中添加一个回退依赖项.问题是我想要符合CRAN并且无法弄清楚如何正确地完成它. 更具体地说,我想使用data.table的fread / fwrite.除此之外,我不想拥有完整的data.table依赖.如果没
更具体地说,我想使用data.table的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’或’require’调用’data.table’.
请改用::或requireNamespace().
这意味着我不会通过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上搜索对用户很有用:cran l = R yourTerm所以请尝试this one.我在许多软件包中使用非常成语.