【发布时间】:2018-04-23 17:05:56
【问题描述】:
我目前正在构建一个 R 包,称之为mypackage。我使用devtools::use_vignette("my-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() 加载该包。我怎样才能解决这个问题并加载我的包,以便在包小插图中使用它的功能和数据?具体来说,我怎样才能使包的功能可用于 knitr 用于编织小插图的任何环境?
我看到其他包小插曲直接使用library() 加载包没有问题;例如,在stringr 小插图中。
我希望读者可以在没有完全可复现的例子的情况下对此进行评估;复制整个示例很困难,因为它需要一个完整的 R 包目录结构,在此处难以复制或共享。
【问题讨论】:
-
您在小插图中使用的功能是否已导出? (即,它在文档中有
#' @export) -
啊,这似乎确实是问题所在(不使用@export)。谢谢 - 如果你们中的任何一个将其作为答案发布,我会将其标记为正确!