我使用child
块模块化了我的插图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:
https://stackoverflow.com/a/49463061/4468078表示RStudio使用package文件夹以root身份构建vignet(这可以解释为什么找不到文件)。
更新2:
如果已经创建了一个可重复性最小的示例包以及github上的发现摘要:
https://github.com/aryoda/R_pkg_knitr_child_vignette_issue
更新3:
我在knitr
(https://github.com/yihui/knitr/issues/1540)打开了一个问题,但是@ user2554330已将tools
命名空间标识为问题的一个原因......
更新4:
查看Duncan Murdoch开设的bugzilla bug条目:https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=17416
答案 0 :(得分:1)
这看起来像一个bug(或者可能不止一个)。我可能把它称为R中的一个错误,但它可能是knitr
中的一个错误。在构建tarball时,R会将主文件复制到inst/doc
,而不是子文件。 knitr
然后查看它,因为它没有看到孩子,它会退出。
要获取要构建的包,只需在inst/doc
中使用与子文件同名的空文件。但这还不足以通过检查。
检查包时,R会看到该子文件位于inst/doc
,并因为它不是一个合适的插图而感到沮丧。所以你需要欺骗R认为它是一个。
据我所知,这是一个简单(虽然难看)的解决方法。只需将名为child_doc.Rmd
的文件放入inst/doc
目录即可。为了让R认为它是一个小插图,复制行
%\VignetteIndexEntry{title}
%\VignetteEngine{rmarkdown::render}
%\VignetteEncoding{UTF-8}
来自主文件。否则,内容似乎无关紧要,所以我不会在那里放任何东西。
将真实的child_doc.Rmd
文件放入vignettes
目录。我想如果你这样做,你的软件包将构建并检查没有错误。
这可能值得一个bug报告,但我不确定该修复应该是什么。也许knitr
在检查中应该更宽容,或者R应该更快地复制文件。
太糟糕了,解决方法非常难看,一旦修复了错误,可能会导致其他问题。