为什么roxygen2不会自动更新"进口"在描述文件中?

时间:2016-05-12 17:17:15

标签: r roxygen2

我正在努力密切关注@ hadley' book来学习编写R包的最佳实践。我很高兴阅读关于本书philosophy的这些内容:

  

任何可自动化的东西都应该是自动化的。尽可能少   可以手工制作。尽可能多地使用函数。

因此,当我阅读NAMESPACE文件中的导入指令与" Imports:"之间的依赖关系和(某种)混淆差异时。在DESCRIPTION文件中的字段,我希望roxygen2会自动处理它们。 After all

  

NAMESPACE中提到的每个包装也必须出现在   导入或取决于字段。

我希望roxygen2能够在我的函数中使用每个@import,并确保它包含在DESCRIPTION文件中。但它并没有自动完成。

因此,我必须手动将其添加到DESCRIPTION文件中,或者几乎手动使用devtools::use_package

寻找答案,我在SO中找到了question,其中@hadley在评论中确认了

  

目前,命名空间roclet将修改NAMESPACE但不会   说明

和其他帖子(例如herehere),其中讨论了collate_roclet,但" This only matters if your code has side-effects; most commonly because you’re using S4"。

我想知道:

  • 描述不会自动更新的原因(有点与上述哲学相矛盾,可能由roxygen2分享)和
  • 如果某人已经制定了一种方法,

3 个答案:

答案 0 :(得分:1)

namespace_roclet根据函数前脚本中添加的标记编辑NAMESPACE文件。由于存在三种类型的依赖关系(DependsImportsSuggests),因此namespace_roclet使用的类似方法需要三个不同的标记(通知{{1应该是一个不同的,以区别于要在Imports中附加的包。)

如果您愿意采用半自动化流程,则可以在适当的部分中找出已使用的软件包并将缺少的软件包添加到NAMESPACE

DESCRIPTION

答案 1 :(得分:1)

关于你想知道底部的两颗子弹:

  • 使用额外的roclet可以进一步自动化对DESCRIPTION文件的更新,但是已经在4年前推迟了这样的拉取请求: https://github.com/klutometis/roxygen/pull/76
  • 我必须假设这些人确实会让您使用devtools包来更新DESCRIPTION文件,而不是将其添加到roxygen2。因此,从这个意义上说,devtools将是第一个可用选择

答案 2 :(得分:0)

我为该任务写了一些R软件包:

https://github.com/markusdumke/pkghelper

它将扫描R代码和NAMESPACE中正在使用的软件包,并将它们添加到Imports部分。