【问题标题】:why roxygen2 does not automatically update "Imports" in DESCRIPTION file?为什么 roxygen2 不会自动更新DESCRIPTION文件中的“Imports”?
【发布时间】:2016-09-08 16:16:00
【问题描述】:

我正在努力密切关注@hadley 的book,以学习编写 R 包的最佳实践。我很高兴读到这些关于本书philosophy 的台词:

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

因此,当我阅读依赖关系以及 NAMESPACE 文件中的导入指令与DESCRIPTION 文件中的“导入:”字段之间的(某种)令人困惑的差异时,我希望roxygen2 会自动处理它们. After all

NAMESPACE 中提到的每个包也必须存在于 Imports 或 Depends 字段。

我希望roxygen2 会在我的函数中获取每个@import,并确保它包含在DESCRIPTION 文件中。但它不会自动执行此操作。

所以我要么必须手动将其添加到说明文件中,要么几乎手动使用devtools::use_package

四处寻找答案,我在 SO 中找到了这个 question,@hadley 在 cmets 中确认了

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

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

我想知道:

  • DESCRIPTION 没有自动更新的原因(有点与上述哲学相矛盾,这可能由 roxygen2 共享)和
  • 如果有人已经想出了办法

【问题讨论】:

    标签: r roxygen2


    【解决方案1】:

    我为此任务编写了一个小 R 包:

    https://github.com/markusdumke/pkghelper

    它会扫描 R 代码和 NAMESPACE 以查找正在使用的包,并将它们添加到 Imports 部分。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-01-25
          • 2016-12-08
          • 1970-01-01
          • 1970-01-01
          • 2023-01-04
          • 1970-01-01
          • 2018-06-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多