2016-05-12 85 views
13

我正在密切关注@ hadley的book以了解编写R软件包的最佳实践。我很高兴看到这些关于philosophy的书:为什么roxygen2不会自动更新DESCRIPTION文件中的“Imports”?

任何可以自动化的东西都应该是自动的。只需手动操作,即可尽量少用 。尽可能多地使用功能。

所以,当我在阅读有关的依赖和(在某种程度上)命名空间中的文件导入指令和“进口”之间的混淆不同领域的说明文件,我希望roxygen2会自动处理两者的他们。 After all

在NAMESPACE提到的每个包还必须存在于 进口或取决于字段。

我希望roxygen2将在我的函数中使用每个@import,并确保它包含在DESCRIPTION文件中。但它不会自动执行。

所以我要么手动添加到描述文件或几乎手动使用devtools::use_package

四处寻找一个答案,我发现这个question在SO,其中@hadley证实在评论认为

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

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

我在想:

  • 这样的描述不会自动更新的原因(在某种程度上违背了上述理念,这大概是由roxygen2共享)和
  • 如果有人已经制作的方式来做到这一点

回答

0

namespace_roclet根据函数前脚本中添加的标签编辑NAMESPACE文件。由于存在三种类型的相关性(Depends,ImportsSuggests),与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 
0

至于你想知道在底部的两个子弹:

  • 更新的说明文件可能有额外的roclets进一步自动化,但是已经“4年以前这样的拉请求延期: https://github.com/klutometis/roxygen/pull/76
  • 我不得不假设这些家伙确实宁愿让你使用devtools包来更新DESCRIPTION文件,而不是将其添加到roxygen2。所以在这个意义上,devtools将是第一个可用选择
相关问题