我正在努力密切关注@ hadley' book来学习编写R包的最佳实践。我很高兴阅读关于本书philosophy的这些内容:
任何可自动化的东西都应该是自动化的。尽可能少 可以手工制作。尽可能多地使用函数。
因此,当我阅读NAMESPACE文件中的导入指令与" Imports:"之间的依赖关系和(某种)混淆差异时。在DESCRIPTION文件中的字段,我希望roxygen2
会自动处理它们。 After all
NAMESPACE中提到的每个包装也必须出现在 导入或取决于字段。
我希望roxygen2
能够在我的函数中使用每个@import,并确保它包含在DESCRIPTION文件中。但它并没有自动完成。
因此,我必须手动将其添加到DESCRIPTION文件中,或者几乎手动使用devtools::use_package
。
寻找答案,我在SO中找到了question,其中@hadley在评论中确认了
目前,命名空间roclet将修改NAMESPACE但不会 说明
和其他帖子(例如here或here),其中讨论了collate_roclet
,但" This only matters if your code has side-effects; most commonly because you’re using S4"。
我想知道:
roxygen2
分享)和答案 0 :(得分:1)
namespace_roclet
根据函数前脚本中添加的标记编辑NAMESPACE
文件。由于存在三种类型的依赖关系(Depends
,Imports
和Suggests
),因此namespace_roclet
使用的类似方法需要三个不同的标记(通知{{1应该是一个不同的,以区别于要在Imports
中附加的包。)
如果您愿意采用半自动化流程,则可以在适当的部分中找出已使用的软件包并将缺少的软件包添加到NAMESPACE
。
DESCRIPTION
答案 1 :(得分:1)
关于你想知道底部的两颗子弹:
devtools
包来更新DESCRIPTION文件,而不是将其添加到roxygen2
。因此,从这个意义上说,devtools
将是第一个可用选择答案 2 :(得分:0)
我为该任务写了一些R软件包:
https://github.com/markusdumke/pkghelper
它将扫描R代码和NAMESPACE中正在使用的软件包,并将它们添加到Imports
部分。