在自身软件包的vignette中加载R软件包

7
我目前正在构建一个R软件包,称其为。我使用devtools::use_vignette("my-vignette")生成了一个软件包文档,并填充了my-vignette内容。当然,因为这是一个软件包文档,我需要演示该软件包本身所包含的函数和数据的使用。但是,在编织vignette时,我遇到了加载软件包及其内容的问题。
在我的本地计算机上,vignette中的所有代码块都可以无错误运行,即使重新启动R并清除工作区也是如此。然而,当我尝试使用devtools::build()构建软件包时,构建失败,出现以下错误: Error in library(mypackage): there is no package called `mypackage` Calls: <Anonymous> ... withCallingHandlers -> withVisible -> eval -> eval -> library Execution halteddevtools::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()运行无误,但是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 软件包目录结构,在这里很难复制或共享。

你在vignette中使用的函数是否已经被导出?(即,它在文档中有#' @export - fmic_
啊,那确实似乎是问题所在(没有使用@export)。谢谢 - 如果你们中的任何一个把这个作为答案发布,我会标记它为正确的! - jpgard
3个回答

2

我在我的vignettes中直接加载了我的包 (library(my_package))。

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

请确保my_function确实被导出。您应该在函数文档的末尾添加以下代码。

#' @export

2
最初的回答:

我添加了一块内容

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

在使用小品时,可以在开始时解决问题。然而,这并不能真正解决实际问题,因为这不应该是必要的。

1

如果您不导出该函数,可以使用 ::: 表示法,例如:

mypackage:::my_function()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接