【问题标题】:How to include an HTML vignette in a binary R package如何在二进制 R 包中包含 HTML 小插图
【发布时间】:2019-07-05 03:41:33
【问题描述】:

我为内部目的编写了一个 R 包,还添加了一些小插曲。当我使用devtools::install(build_vignettes = TRUE) 时,所有小插图都已正确安装在我的机器上。但是为了将包分发给同事,我想生成一个 Windows 二进制文件。

但是,当我从 RStudio 构建窗格中使用 构建二进制包 时,从生成的二进制文件安装包时,不会显示小插图。我想在构建二进制包之前,我可以将小插图从 doc 移动到 inst/doc,但这需要在小插图更改时手动完成。

来自R CMD INSTALL --help 我不知道是否可以选择包含构建小插图。

有没有比手动将文件从doc 复制到inst/doc 更好的选择?

我已经尝试过devtools::build_vignettes()。这是控制台的输出:

> devtools::build_vignettes()
Building archivR vignettes
Moving vig1.html, vig2.html, vig1.R, vig2.R to doc/
Copying vig1.Rmd, vig2.Rmd to doc/
Building vignette index

它说文件被复制到doc/。它们不会出现在inst/doc 中。

【问题讨论】:

  • 如果您使用devtools::build_vignettes,小插图将转到inst/doc 文件夹。
  • 这不起作用。请查看我的编辑...
  • 为 mac 二进制文件遇到同样的问题。这会是一个错误吗?

标签: r build package


【解决方案1】:

如果你使用

devtools::build()
devtools::build("../package_name.tar.gz", binary=TRUE)

然后小插曲将被构建到 tar.gz 文件中,首先是二进制文件。

无需移动任何文件

【讨论】:

  • 你能添加更多细节@der_grund 吗?我正在使用Windows顺便说一句。为了更清楚,需要编辑“../package_name.tar.gz”以匹配由 devtools::build() 创建的文件
  • 我遇到了同样的问题,很惊讶在 RStudio 材料中没有更好地解决它。在撰写此评论时,我发现这是最简单的方法
  • 以上可以这样组合:devtools::build(devtools::build(), binary = TRUE)
【解决方案2】:

仅供参考:

最可靠的方法是构建一个源包(.tar.gz 文件),然后使用命令工具而不是 RStudio 来构建二进制文件。如果您在可以找到源包的目录中,则可以在命令行中使用以下命令(前提是 R 在您的 PATH 中):

R CMD INSTALL --build pkgname_x.y.z.tar.gz

pkgname_x.y.z.tar.gz 是包含源包的 tar 文件的名称。

请注意,如果您想正确添加小插图,则应先创建源包并从源包构建。

【讨论】:

  • 这行得通。附注:为了在 Windows 上运行此命令,RTools 中的 bin 文件夹必须包含在 PATH 环境变量中。
【解决方案3】:

我也一直在为同样的问题而苦苦挣扎。

  • 以前,devtools::build_vignettes() 将结果放在inst/doc 中(例如,按照最后一个要点here 中的建议)。
  • 自 2.0.0 版(2018 年 10 月发布)以来,devtools::build_vignettes() 现在将结果放在doc 中(具体更改似乎是here)。此更改的原因在与此提交相关的问题中给出。

我无法找到仅使用devtools 完成之前工作流程的方法,因此我使用了以下代码。它将覆盖inst/docinst/Meta 中已经存在的所有文件。

build_vignettes_to_inst <- function() {
  devtools::build_vignettes() # Builds vignettes to 'doc' and 'Meta'. Updates '.gitignore'.
  unlink(c("inst/doc", "inst/Meta"), recursive = TRUE) # Remove the directories if they exist
  dir.create("inst/doc"); dir.create("inst/Meta") # Create empty directories
  has_worked <- c( # Copy files to 'inst' subfolders
    file.copy(list.files("doc", full.names = TRUE), to = "inst/doc") 
    , file.copy(list.files("Meta", full.names = TRUE), to = "inst/Meta")
  )
  unlink(c("doc", "Meta"), recursive = TRUE) # Optional: Remove unwanted directories
  return(all(has_worked)) # Returns TRUE if everything worked OK
}

build_vignettes_to_inst() # Call the function

您现在可以使用binary = TRUE 调用devtools::build(),它将包含已构建(即HTML)的小插曲。

【讨论】:

  • @tshimkus 是的,这个解决方案对我有用,使用上面的代码。
  • 感谢您分享您的方法。但是,与我在 RStudio 的 Windows 终端中键入的 robocopy doc inst/doc 相比,这看起来相当复杂。因为你只在生成二进制包之前需要它。
  • 好点。我的答案使用基本 R 功能来避免手动复制文件的需要。
猜你喜欢
  • 2015-10-01
  • 1970-01-01
  • 2019-02-19
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 2022-08-14
相关资源
最近更新 更多