如何在二进制R包中包含HTML小插图

时间:2019-02-11 15:38:30

标签: r build package

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

但是,当我从RStudio Build窗格中使用 Build binary package 时,从生成的二进制文件安装软件包时,小插图将不会显示。我认为可以在构建二进制包之前将小插图从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中。

3 个答案:

答案 0 :(得分:2)

我也一直在努力解决同样的问题。

  • 以前,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

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

答案 1 :(得分:0)

如果您使用

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

然后将小插图先构建到tar.gz文件中,然后再构建到二进制文件中。

无需移动任何文件

答案 2 :(得分:0)

仅供参考:

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

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

使用pkgname_x.y.z.tar.gz包含源软件包的tar文件的名称。

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