Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R devtools构建vignette can';找不到函数_R_Devtools - Fatal编程技术网

R devtools构建vignette can';找不到函数

R devtools构建vignette can';找不到函数,r,devtools,R,Devtools,如果我在包中使用devtools::use_vignette(“我的vignette”),那么运行devtools::build_vignette()就可以了 但是,一旦我添加了对包中任何内容的调用,它就会停止工作,错误是找不到函数“myfunc”。如果我添加一个库(mypackage)调用,我会得到错误没有名为“mypackage”的包。 (我应该注意,我的软件包检查、构建和安装非常干净[没有小插曲],并且运行devtools::load_all()也可以很好地用于交互式会话。) 我知道,如果

如果我在包中使用
devtools::use_vignette(“我的vignette”)
,那么运行
devtools::build_vignette()
就可以了

但是,一旦我添加了对包中任何内容的调用,它就会停止工作,错误是
找不到函数“myfunc”
。如果我添加一个
库(mypackage)
调用,我会得到错误
没有名为“mypackage”的包。

(我应该注意,我的软件包检查、构建和安装非常干净[没有小插曲],并且运行
devtools::load_all()
也可以很好地用于交互式会话。)

我知道,如果我构建并安装我的软件包,那么我就可以构建小场景。这似乎是一种非常低效和危险的发展方式;实际上,每次提交都迫使我重新构建和安装整个软件包,以测试vignette没有崩溃


是否有其他方法让vignette识别正在进行的包?

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

如果未使用RStudio IDE,则可以使用函数
rmarkdown::render
呈现文档,而无需构建包

然而,为了工作,您的vignette需要加载您的包。因此,正如您所说,您必须调用
库(mypackage)
,因此必须安装您的包。
您可以使用
devtools::install(build\u vignette=FALSE)
在命令行中安装程序包,而不使用vignette。在RStudio IDE中,按钮
Build&Reload
不适合装入软件包`

非rstudioide用户的另一个解决方案是在vignette中使用
devtools::load_all(包的路径)
,以便在vignette环境中模拟包的安装。然后,您可以使用
devtools::build vignette
构建vignette,而无需在之前安装软件包


我应该强调,当您构建包时,vignette是自动构建的。因此,当开发完成时,在vignette
devtools::load_all
by
library
中替换,因为在构建包时,您的包是在构建vignette之前加载的

如果您在github中查找Hadley Wickham的软件包,您将看到他在其小插曲的顶部包括一个库(xyz),例如

然后,构建渐晕图的方法起作用:

您可以使用
*devtools::build\u vignettes()*
,但这很少有用。相反 使用
devtools::build()
创建一个包含vignette的包包包 包括在内

我相信这就是您需要向CRAN提交的文件包


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

我知道已经有了答案,但这就是我在使用手写小插图时解决相同问题的方法

我不确定这是否适用于build_vignette(),但当我因为同样的错误编织vignette时,我必须做的是:

  • /NAMESPACE
    我必须为我想在vignette中使用的每个函数添加
    export(myFuncName)
    ,同时添加
    useDynLib(myPackageName)
    一次
  • 我必须在
    /DESCRIPTION
    文件中为我指定一个VignetteBuilder选项,它是
    VignetteBuilder:knitr

  • 我很感激你的评论,但这根本没有回答我的问题。这是我发展的方式。如果您执行一个
    devtools::load_all
    ,然后执行文档中的所有r块,而不构建vignette,它们将在您的环境中运行,以便找到packge函数。否则,
    devtools::install
    +
    rmarkdown::render
    应该可以工作:您试过了吗?您也可以尝试在渐晕图的边缘使用
    devtools::load_all(路径到您的包文件夹)
    ,以模拟编织时的安装。值得一试。使用
    devtools::load\u all
    是可行的,尽管它确实增加了对devtools不必要的依赖。如果你把它编辑成你的答案,我会接受的。我编辑了这个小插曲。对我来说,devtools不应该被添加为依赖项,因为当您想要发布包时,应该在vignette中使用“library”。它应该可以工作,因为构建包在加载包后也会生成vignette。在vignette中使用
    devtools::load_all()
    对包运行检查会创建一个注释,
    :“或”::“导入未声明自:'devtools'
    。允许它只是一个注释(因此我可以忽略它),但我更愿意限制从CRAN.FWIW拒绝该包的原因:我遇到了类似的问题,并意识到我没有导出我的函数(使用@export in.R文件,然后使用roxygen使用export命令生成名称空间)。名称空间文件是否导出在构建vignette时找不到的函数?