devtools build_vignette无法找到函数

时间:2016-03-01 16:02:23

标签: r devtools

如果我在我的包中使用devtools::use_vignette("my-vignette"),则运行devtools::build_vignette()可以正常工作。

但是,一旦我从我的包中添加了对任何内容的调用,它就会停止工作,错误为could not find function "myfunc"。如果我添加library(mypackage)来电,则会收到错误there is no package called 'mypackage'

(我应该注意,我的包检查,构建和安装完全干净[没有晕影],并且运行devtools::load_all()也适用于交互式会话。)

我知道如果我建立&安装我的包,然后我可以建立小插曲。这似乎是一种非常低效和危险的发展方式;基本上迫使我在每次提交时重新构建并重新安装整个软件包,以测试小插图没有破坏。

还有另一种方法可以让小插图识别正在进行的包吗?

3 个答案:

答案 0 :(得分:6)

如果您使用的是RStudio IDE(这对包开发很有帮助),您可以通过单击编织按钮来呈现由devtools::use_vignette创建的Rmd文档。它将创建插图的预览版本。 顺便说一句,RStudio IDE为您提供了有用的快捷键和按钮,可以按块来执行您的Rmd文档块,以测试它是否正常工作。

如果您不使用RStudio IDE,则可以使用函数rmarkdown::render呈现文档而不构建包。

但是,为了正常工作,您的插图需要加载您的包裹。因此,正如您所说,您必须致电library(mypackage),因此必须安装您的包裹 您可以使用devtools::install(build_vignette = FALSE)在命令行中安装没有插图的程序包。在RStudio IDE中,按钮Build & Reload非常适合安装你的包。

Rstudio IDE的非用户的另一个解决方案是在插图中使用devtools::load_all(path to your package),以便在小插图环境中模拟包的安装。然后,您可以使用devtools::build vignette建立您的小插图,而无需在此之前安装您的包。

我应该强调,在构建程序包时会自动构建vignette。因此,在完成开发后,请在devtools::load_all小插图中替换library,因为在构建包之前构建小插图之前已加载包。

答案 1 :(得分:3)

如果你在github中查找Hadley Wickham的软件包,你会看到他在他的插图的顶部包含一个库(xyz),例如: https://github.com/tidyverse/dplyr/blob/master/vignettes/dplyr.Rmd

然后his recommended构建小插图的方式有效:

  

您可以使用控制台构建所有晕影   *devtools::build_vignettes()*,但这很少有用。代替   使用devtools::build()创建一个包含晕影的包   包括在内。

我相信您需要向CRAN提交包裹。

这是一个缓慢的开发周期,因此对于主动编码,您可以插入一行devtools::load_all()来使用RStudio中的编织。

答案 2 :(得分:0)

我知道已经有一个答案,但这就是我使用手写小插图解决相同问题的方式。

我不确定这是否适用于build_vignette(),但是当由于相同的错误而无法编织小插图时,我要做的是:

  1. <path/to/your/Rpackage>/NAMESPACE我必须为要在插图中使用的每个功能分别添加export(myFuncName)useDynLib(myPackageName)一次。
  2. 我必须在<path/to/your/Rpackage>/DESCRIPTION文件中为我指定一个VignetteBuilder选项,它是VignetteBuilder: knitr