devtools build_vignette 找不到函数

devtools build_vignette can't find functions

如果我在我的包中使用 devtools::use_vignette("my-vignette"),运行 devtools::build_vignette() 工作正常。

但是,一旦我从我的包中添加对任何内容的调用,它就会停止工作,并出现错误 could not find function "myfunc"。如果我添加 library(mypackage) 调用,我会收到错误 there is no package called 'mypackage'.

(我应该注意到我的包检查、构建和安装非常干净 [没有小插曲],并且 运行 devtools::load_all() 也适用于交互式会话。)

我知道如果我构建并安装我的包,我就可以构建小插图。这似乎是一种非常低效且危险的开发方式;基本上迫使我在每次提交时重新构建并重新安装整个包,以测试小插图是否损坏。

是否有其他方法让小插图识别正在进行的包?

如果您使用的是 RStudio IDE(这对包开发非常有帮助),您可以渲染由 devtools::use_vignette 创建的 Rmd 文档,方法是单击 Knit 按钮。它将创建您的小插图的预览版本。 顺便说一下,R​​Studio IDE 为您提供了有用的快捷键和按钮来逐块执行您的 Rmd 文档以测试它是否正常工作。

如果您没有使用 RStudio IDE,您可以使用函数 rmarkdown::render.

在不构建包的情况下呈现您的文档

但是,为了正常工作,您的 vignette 需要加载您的包。因此,正如您所说,您必须调用 library(mypackage),因此必须安装您的软件包。
您可以使用 devtools::install(build_vignette = FALSE) 在命令行中安装没有小插图的软件包。在 RStudio IDE 中,按钮 Build & Reload 足以安装您的包。`

非 Rstudio 用户 IDE 的另一个解决方案是在您的 vignette 中使用 devtools::load_all(path to your package) 以模拟您的软件包在 vignette 环境中的安装。然后,您可以使用 devtools::build vignette 构建您的小插图,而无需事先安装您的包。

我应该强调一下,当你构建你的包时,小插图是自动构建的。因此,当开发完成后,将小插图 devtools::load_all 替换为 library,因为在构建包时,您的包在构建小插图之前已加载。

如果您在 github 中查找 Hadley Wickham 的软件包,您会看到他在他的小插图顶部包含一个库 (xyz),例如https://github.com/tidyverse/dplyr/blob/master/vignettes/dplyr.Rmd

然后 his recommended 构建插图的方法有效:

You can build all vignettes from the console with *devtools::build_vignettes()*, but this is rarely useful. Instead use devtools::build() to create a package bundle with the vignettes included.

我相信这是您向 CRAN 提交包裹所需要的。

不过,这是一个缓慢的开发周期,因此对于主动编码,您可以插入一行 devtools::load_all() 以在 RStudio 中使用 knit。

我知道已经有了答案,但这就是我在使用手写小插图时解决同样问题的方法。

我不确定这是否适用于 build_vignette() 但是当我因为同样的错误而无法编织我的小插图时,我必须做的是:

  1. <path/to/your/Rpackage>/NAMESPACE 我必须为我想在小插图中使用的每个函数添加 export(myFuncName) 以及 useDynLib(myPackageName) 一次。
  2. 我必须在 <path/to/your/Rpackage>/DESCRIPTION 文件中为我指定一个 VignetteBuilder 选项,它是 VignetteBuilder: knitr