包构建失败,因为 vignette 没有找到子 Rmd 文件
Package build fails because vignette does not find child Rmd files
我已经使用 child
块对我的 vignette Rmd 文件进行了模块化,以便能够在其他 Rmd 文档中重用子 Rmd 文件。
包构建失败(在 RStudio 和 R CMD build .
中)并显示此错误消息:
** installing vignettes
‘Vignette.Rmd’ using ‘UTF-8’
Warning in readLines(if (is.character(input2)) { :
cannot open file 'child_doc.Rmd': No such file or directory
Quitting from lines 10-11 (child_doc.Rmd)
Error in readLines(if (is.character(input2)) { :
cannot open the connection
ERROR: installing vignettes failed
如何构建我的包(让 R 找到我的子 Rmd 文件)?
示例 Rmd 文件:
Vignette.Rmd
---
title: "title"
author: "me"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{title}
%\VignetteEngine{rmarkdown::render}
%\VignetteEncoding{UTF-8}
main doc
```{r child = "child_doc.Rmd"}
```
child_doc.Rmd:
# This is from the child doc
lorem ipsum
更新 1:
表示 RStudio 使用包文件夹作为根目录构建小插图(这可以解释为什么找不到文件)。
更新二:
如果在 github:
创建了一个最小的可复制示例包以及调查结果摘要
https://github.com/aryoda/R_pkg_knitr_child_vignette_issue
更新 3:
我已经在 knitr
(https://github.com/yihui/knitr/issues/1540) 提出了一个问题,但是 @user2554330 已经确定 tools
命名空间是问题的原因之一...
更新四:
查看 Duncan Murdoch 打开的 bugzilla 错误条目:https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=17416
这看起来像是一个错误(或者可能不止一个)。我可能会称它为 R 中的错误,但它可能是 knitr
中的错误。当您构建 tarball 时,R 将主文件复制到 inst/doc
,而不是 child 文件。 knitr
然后查看它,因为它没有看到 child,所以它退出了。
要构建要构建的包,您只需要在 inst/doc
中创建一个与 child 文件同名的空文件。但这还不足以通过检查。
检查包时,R 会看到 child 文件位于 inst/doc
中,并且会因为它不是合适的小插图而感到不安。所以你需要愚弄R,让它认为它是一个。
据我所知,有一个简单(虽然难看)的解决方法。只需将名为 child_doc.Rmd
的文件放入 inst/doc
目录即可。要使 R 认为它是一个小插图,请复制行
%\VignetteIndexEntry{title}
%\VignetteEngine{rmarkdown::render}
%\VignetteEncoding{UTF-8}
来自主文件。否则,内容似乎无关紧要,所以我不会在那里放任何其他内容。
将真正的child_doc.Rmd
文件放入vignettes
目录。我想如果你这样做,你的包将无误地构建和检查。
这可能值得一个错误报告,但我不确定应该如何修复。也许 knitr
在检查时应该更宽容,或者 R 应该更快地复制文件。
太糟糕了,解决方法太丑陋了,一旦错误修复,可能会导致其他问题。
我已经使用 child
块对我的 vignette Rmd 文件进行了模块化,以便能够在其他 Rmd 文档中重用子 Rmd 文件。
包构建失败(在 RStudio 和 R CMD build .
中)并显示此错误消息:
** installing vignettes
‘Vignette.Rmd’ using ‘UTF-8’
Warning in readLines(if (is.character(input2)) { :
cannot open file 'child_doc.Rmd': No such file or directory
Quitting from lines 10-11 (child_doc.Rmd)
Error in readLines(if (is.character(input2)) { :
cannot open the connection
ERROR: installing vignettes failed
如何构建我的包(让 R 找到我的子 Rmd 文件)?
示例 Rmd 文件:
Vignette.Rmd
---
title: "title"
author: "me"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{title}
%\VignetteEngine{rmarkdown::render}
%\VignetteEncoding{UTF-8}
main doc
```{r child = "child_doc.Rmd"}
```
child_doc.Rmd:
# This is from the child doc
lorem ipsum
更新 1:
更新二:
如果在 github:
创建了一个最小的可复制示例包以及调查结果摘要https://github.com/aryoda/R_pkg_knitr_child_vignette_issue
更新 3:
我已经在 knitr
(https://github.com/yihui/knitr/issues/1540) 提出了一个问题,但是 @user2554330 已经确定 tools
命名空间是问题的原因之一...
更新四:
查看 Duncan Murdoch 打开的 bugzilla 错误条目:https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=17416
这看起来像是一个错误(或者可能不止一个)。我可能会称它为 R 中的错误,但它可能是 knitr
中的错误。当您构建 tarball 时,R 将主文件复制到 inst/doc
,而不是 child 文件。 knitr
然后查看它,因为它没有看到 child,所以它退出了。
要构建要构建的包,您只需要在 inst/doc
中创建一个与 child 文件同名的空文件。但这还不足以通过检查。
检查包时,R 会看到 child 文件位于 inst/doc
中,并且会因为它不是合适的小插图而感到不安。所以你需要愚弄R,让它认为它是一个。
据我所知,有一个简单(虽然难看)的解决方法。只需将名为 child_doc.Rmd
的文件放入 inst/doc
目录即可。要使 R 认为它是一个小插图,请复制行
%\VignetteIndexEntry{title}
%\VignetteEngine{rmarkdown::render}
%\VignetteEncoding{UTF-8}
来自主文件。否则,内容似乎无关紧要,所以我不会在那里放任何其他内容。
将真正的child_doc.Rmd
文件放入vignettes
目录。我想如果你这样做,你的包将无误地构建和检查。
这可能值得一个错误报告,但我不确定应该如何修复。也许 knitr
在检查时应该更宽容,或者 R 应该更快地复制文件。
太糟糕了,解决方法太丑陋了,一旦错误修复,可能会导致其他问题。