在包装本身的装饰图案中加载R包

时间:2017-11-10 12:55:17

标签: r package knitr devtools

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

即使在重新启动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()运行没有错误,但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()加载该包。我如何绕过这个并加载我的包以便在包装插图中使用它的功能和数据?具体来说,我如何使其功能中的包可用于编织者用来编织小插图的任何环境?

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

#' @export

答案 1 :(得分:1)

或者,您也可以使用:::表示法,特别是如果您不导出该功能,例如

mypackage:::my_function()

答案 2 :(得分:0)

我添加了一个块

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

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

但是,这不能解决 actual 问题,因为这不是必需的。