【问题标题】:Loading R package in vignette for the package itself在小插图中为包本身加载 R 包
【发布时间】: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)。谢谢 - 如果你们中的任何一个将其作为答案发布,我会将其标记为正确!

标签: r package knitr devtools


【解决方案1】:

我添加了一个块

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

在小插曲的开头解决问题。

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

【讨论】:

    【解决方案2】:

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

    mypackage:::my_function()

    【讨论】:

      【解决方案3】:

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

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

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

      #' @export
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-20
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 1970-01-01
        • 2019-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多