如果我在我的包中使用devtools::use_vignette("my-vignette")
,则运行devtools::build_vignette()
可以正常工作。
但是,一旦我从我的包中添加了对任何内容的调用,它就会停止工作,错误为could not find function "myfunc"
。如果我添加library(mypackage)
来电,则会收到错误there is no package called 'mypackage'
。
(我应该注意,我的包检查,构建和安装完全干净[没有晕影],并且运行devtools::load_all()
也适用于交互式会话。)
我知道如果我建立&安装我的包,然后我可以建立小插曲。这似乎是一种非常低效和危险的发展方式;基本上迫使我在每次提交时重新构建并重新安装整个软件包,以测试小插图没有破坏。
还有另一种方法可以让小插图识别正在进行的包吗?
答案 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(),但是当由于相同的错误而无法编织小插图时,我要做的是:
<path/to/your/Rpackage>/NAMESPACE
我必须为要在插图中使用的每个功能分别添加export(myFuncName)
和useDynLib(myPackageName)
一次。<path/to/your/Rpackage>/DESCRIPTION
文件中为我指定一个VignetteBuilder选项,它是VignetteBuilder: knitr
。