我目前正在构建一个R包,称为mypackage。我使用devtools::use_vignette("my-vignette")生成了一个包小插图,并用内容填充了我的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()加载该程序包。我如何解决这个问题并加载我的包,以便在包小插图中使用它的功能和数据?具体而言,如何使knitr用来编织小插图的任何环境都可以使用其功能中的包?

我已经看到其他软件包小插图直接使用library()加载了该​​软件包,而没有任何问题。例如,在stringr小插图中。

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

最佳答案

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

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

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

#' @export

09-06 07:27