为什么roxygen2不会自动更新DESCRIPTION文件中的“Imports”?
我正在密切关注@ hadley的book以了解编写R软件包的最佳实践。我很高兴看到这些关于philosophy的书:为什么roxygen2不会自动更新DESCRIPTION文件中的“Imports”?
任何可以自动化的东西都应该是自动的。只需手动操作,即可尽量少用 。尽可能多地使用功能。
所以,当我在阅读有关的依赖和(在某种程度上)命名空间中的文件导入指令和“进口”之间的混淆不同领域的说明文件,我希望roxygen2
会自动处理两者的他们。 After all
在NAMESPACE提到的每个包还必须存在于 进口或取决于字段。
我希望roxygen2
将在我的函数中使用每个@import,并确保它包含在DESCRIPTION文件中。但它不会自动执行。
所以我要么手动添加到描述文件或几乎手动使用devtools::use_package
。
四处寻找一个答案,我发现这个question在SO,其中@hadley证实在评论认为
目前,该命名空间roclet将修改命名空间,但不 说明
和其他帖子(例如here或here),其中collate_roclet
被讨论,但是“This only matters if your code has side-effects; most commonly because you’re using S4”。
我在想:
- 这样的描述不会自动更新的原因(在某种程度上违背了上述理念,这大概是由
roxygen2
共享)和 - 如果有人已经制作的方式来做到这一点
namespace_roclet
根据函数前脚本中添加的标签编辑NAMESPACE
文件。由于存在三种类型的相关性(Depends
,Imports
和Suggests
),与namespace_roclet
所用类似的方法需要三个不同的标签(注意Imports
应该是不同的标签,以区分它与要在NAMESPACE
中附加的包)。
如果您愿意采取半自动化流程,您可以确定您已使用的包装,并将缺少的包装添加到DESCRIPTION
的适当部分。
library(reinstallr)
package.dir <- getwd()
base_path <- normalizePath(package.dir)
files <- list.files(file.path(base_path, "R"), full.names = TRUE)
packages <- unique(reinstallr:::scan_for_packages(files)$package)
packages
至于你想知道在底部的两个子弹:
- 更新的说明文件可能有额外的roclets进一步自动化,但是已经“4年以前这样的拉请求延期: https://github.com/klutometis/roxygen/pull/76
- 我不得不假设这些家伙确实宁愿让你使用
devtools
包来更新DESCRIPTION文件,而不是将其添加到roxygen2
。所以在这个意义上,devtools
将是第一个可用选择