devtools build_vignette 找不到函数
devtools build_vignette can't find functions
如果我在我的包中使用 devtools::use_vignette("my-vignette")
,运行 devtools::build_vignette()
工作正常。
但是,一旦我从我的包中添加对任何内容的调用,它就会停止工作,并出现错误 could not find function "myfunc"
。如果我添加 library(mypackage)
调用,我会收到错误 there is no package called 'mypackage'
.
(我应该注意到我的包检查、构建和安装非常干净 [没有小插曲],并且 运行 devtools::load_all()
也适用于交互式会话。)
我知道如果我构建并安装我的包,我就可以构建小插图。这似乎是一种非常低效且危险的开发方式;基本上迫使我在每次提交时重新构建并重新安装整个包,以测试小插图是否损坏。
是否有其他方法让小插图识别正在进行的包?
如果您使用的是 RStudio IDE(这对包开发非常有帮助),您可以渲染由 devtools::use_vignette
创建的 Rmd 文档,方法是单击 Knit 按钮。它将创建您的小插图的预览版本。
顺便说一下,RStudio IDE 为您提供了有用的快捷键和按钮来逐块执行您的 Rmd 文档以测试它是否正常工作。
如果您没有使用 RStudio IDE,您可以使用函数 rmarkdown::render
.
在不构建包的情况下呈现您的文档
但是,为了正常工作,您的 vignette 需要加载您的包。因此,正如您所说,您必须调用 library(mypackage)
,因此必须安装您的软件包。
您可以使用 devtools::install(build_vignette = FALSE)
在命令行中安装没有小插图的软件包。在 RStudio IDE 中,按钮 Build & Reload
足以安装您的包。`
非 Rstudio 用户 IDE 的另一个解决方案是在您的 vignette 中使用 devtools::load_all(path to your package)
以模拟您的软件包在 vignette 环境中的安装。然后,您可以使用 devtools::build vignette
构建您的小插图,而无需事先安装您的包。
我应该强调一下,当你构建你的包时,小插图是自动构建的。因此,当开发完成后,将小插图 devtools::load_all
替换为 library
,因为在构建包时,您的包在构建小插图之前已加载。
如果您在 github 中查找 Hadley Wickham 的软件包,您会看到他在他的小插图顶部包含一个库 (xyz),例如https://github.com/tidyverse/dplyr/blob/master/vignettes/dplyr.Rmd
然后 his recommended 构建插图的方法有效:
You can build all vignettes from the console with
*devtools::build_vignettes()*
, but this is rarely useful. Instead
use devtools::build()
to create a package bundle with the vignettes
included.
我相信这是您向 CRAN 提交包裹所需要的。
不过,这是一个缓慢的开发周期,因此对于主动编码,您可以插入一行 devtools::load_all()
以在 RStudio 中使用 knit。
我知道已经有了答案,但这就是我在使用手写小插图时解决同样问题的方法。
我不确定这是否适用于 build_vignette() 但是当我因为同样的错误而无法编织我的小插图时,我必须做的是:
<path/to/your/Rpackage>/NAMESPACE
我必须为我想在小插图中使用的每个函数添加 export(myFuncName)
以及 useDynLib(myPackageName)
一次。
- 我必须在
<path/to/your/Rpackage>/DESCRIPTION
文件中为我指定一个 VignetteBuilder 选项,它是 VignetteBuilder: knitr
。
如果我在我的包中使用 devtools::use_vignette("my-vignette")
,运行 devtools::build_vignette()
工作正常。
但是,一旦我从我的包中添加对任何内容的调用,它就会停止工作,并出现错误 could not find function "myfunc"
。如果我添加 library(mypackage)
调用,我会收到错误 there is no package called 'mypackage'
.
(我应该注意到我的包检查、构建和安装非常干净 [没有小插曲],并且 运行 devtools::load_all()
也适用于交互式会话。)
我知道如果我构建并安装我的包,我就可以构建小插图。这似乎是一种非常低效且危险的开发方式;基本上迫使我在每次提交时重新构建并重新安装整个包,以测试小插图是否损坏。
是否有其他方法让小插图识别正在进行的包?
如果您使用的是 RStudio IDE(这对包开发非常有帮助),您可以渲染由 devtools::use_vignette
创建的 Rmd 文档,方法是单击 Knit 按钮。它将创建您的小插图的预览版本。
顺便说一下,RStudio IDE 为您提供了有用的快捷键和按钮来逐块执行您的 Rmd 文档以测试它是否正常工作。
如果您没有使用 RStudio IDE,您可以使用函数 rmarkdown::render
.
但是,为了正常工作,您的 vignette 需要加载您的包。因此,正如您所说,您必须调用 library(mypackage)
,因此必须安装您的软件包。
您可以使用 devtools::install(build_vignette = FALSE)
在命令行中安装没有小插图的软件包。在 RStudio IDE 中,按钮 Build & Reload
足以安装您的包。`
非 Rstudio 用户 IDE 的另一个解决方案是在您的 vignette 中使用 devtools::load_all(path to your package)
以模拟您的软件包在 vignette 环境中的安装。然后,您可以使用 devtools::build vignette
构建您的小插图,而无需事先安装您的包。
我应该强调一下,当你构建你的包时,小插图是自动构建的。因此,当开发完成后,将小插图 devtools::load_all
替换为 library
,因为在构建包时,您的包在构建小插图之前已加载。
如果您在 github 中查找 Hadley Wickham 的软件包,您会看到他在他的小插图顶部包含一个库 (xyz),例如https://github.com/tidyverse/dplyr/blob/master/vignettes/dplyr.Rmd
然后 his recommended 构建插图的方法有效:
You can build all vignettes from the console with
*devtools::build_vignettes()*
, but this is rarely useful. Instead usedevtools::build()
to create a package bundle with the vignettes included.
我相信这是您向 CRAN 提交包裹所需要的。
不过,这是一个缓慢的开发周期,因此对于主动编码,您可以插入一行 devtools::load_all()
以在 RStudio 中使用 knit。
我知道已经有了答案,但这就是我在使用手写小插图时解决同样问题的方法。
我不确定这是否适用于 build_vignette() 但是当我因为同样的错误而无法编织我的小插图时,我必须做的是:
<path/to/your/Rpackage>/NAMESPACE
我必须为我想在小插图中使用的每个函数添加export(myFuncName)
以及useDynLib(myPackageName)
一次。- 我必须在
<path/to/your/Rpackage>/DESCRIPTION
文件中为我指定一个 VignetteBuilder 选项,它是VignetteBuilder: knitr
。