在小插图中为包本身加载 R 包

Loading R package in vignette for the package itself

我目前正在构建一个 R 包,称之为 mypackage。我使用 devtools::use_vignette("my-vignette") 生成了一个包小插图,并在我的小插图中填充了内容。当然,因为是package vignette,所以我需要演示一下这个package本身包含的函数和数据的使用。但是,我在编织小插图时遇到了加载包及其内容的问题。

小插图 运行 中的所有代码块在我的本地计算机上都没有错误,即使在重新启动 R 并清除工作区之后也是如此。但是,当我尝试使用 devtools::build() 构建包时,构建失败并显示:

Error in library(mypackage): there is no package called `mypackage` Calls: <Anonymous> ... withCallingHandlers -> withVisible -> eval -> eval -> library Execution halted

devtools::build() 控制台中的完整输出是:

* checking for file ‘/path/to/mypackage/DESCRIPTION’ ... OK
* preparing ‘mypackage’:
* checking DESCRIPTION meta-information ... OK
* installing the package to build vignettes
* creating vignettes ... ERROR
Quitting from lines 39-44 (my-vignette.Rmd) 
Error: processing vignette 'my-vignette.Rmd' failed with diagnostics:
'my_function' is not an exported object from 'namespace:mypackage'
Execution halted

devtools::document() 运行s 没有错误,但是 devtools::build_vignettes() 显然遇到了一个不同的错误,它不能使用特定的函数(但似乎能够加载包本身):

> devtools::build_vignettes()
Building mypackage vignettes
Moving basic-mypackage-vignette.html, basic-mypackage-vignette.R to inst/doc/
Copying basic-mypackage-vignette.Rmd to inst/doc/
> devtools::build()
'/Library/Frameworks/R.framework/Resources/bin/R' --no-site-file --no-environ --no-save --no-restore --quiet CMD build  \
'/path/to/mypackage' --no-resave-data --no-manual 

* checking for file ‘/path/to/mypackage/DESCRIPTION’ ... OK
* preparing ‘auctestr’:
* checking DESCRIPTION meta-information ... OK
* installing the package to build vignettes
* creating vignettes ... ERROR
Quitting from lines 39-44 (my-vignette.Rmd) 
Error: processing vignette 'my-vignette.Rmd' failed with 
diagnostics:
could not find function "my_function"
Execution halted
Error: Command failed (1)
> devtools::document()
Updating mypackage documentation
Loading mypackage

我认为这是因为包本身不存在于我的 R 库中;我只是在进行开发时使用 devtools::load_all() 加载该包。我怎样才能解决这个问题并加载我的包以便在包小插图中使用它的功能和数据?具体来说,我怎样才能使包的功能可用于 knitr 用来编织小插图的任何环境?

我看到其他包小插图直接使用 library() 加载包没有问题;例如,在 stringr 小插图中。

希望读者在没有完全可重现的例子的情况下评价一下;复制整个示例很困难,因为它需要完整的 R 包目录结构,很难在此处复制或共享。

我确实在我的小插图中直接加载了我的包 (library(my_package))。

但考虑到你的错误,这可能不是问题...

你能确定 my_function 确实被导出了吗?您应该在函数文档的末尾添加以下代码。

#' @export

或者您可以使用 :::: 表示法,尤其是当您不导出该函数时,例如

mypackage:::my_function()

我添加了一个块

```{r, include=FALSE}
devtools::load_all(".")
```

在小插图的开头解决该问题。

但是,这并没有解决 实际 问题,因为这不是必需的。