我有一个主降价文件,例如Parent.Rmd,以及包含的许多子文档:
```{r child="introduction.Rmd", echo=FALSE}
```
```{r child="chapter2.Rmd", echo=FALSE}
```
似乎我应该能够做到:
```{r child="Rmd/introduction.Rmd", echo=FALSE}
```
从名为' Rmd'的子目录中提取相同的文件。但是knitr无法打开连接。
我也尝试过使用:
`knitr::opts_chunk$set(child.path='Rmd')`
但是块代码忽略了它。还有另外一种方法吗?我的rmarkdown版本是0.9.5,knitr是1.12
答案 0 :(得分:0)
希望@Yihui能够比我提出的解决方案更优雅地回答你的问题。 :)
我早些时候在这里做了一个黑客Include HTML files in R Markdown file?。该方法也应该适合您的要求
bookstruct.Rmd文件:
---
title: "BookTitle"
output: html_document
---
My introduction goes here
<<insertHTML:[chapters/chapter2.Rmd]
some practice questions
<<insertHTML:[chapters/chapter3.Rmd]
章节/ chapter2.Rmd文件:
## Chapter 2
This is my chapter 2.
章节/ chapter3.Rmd文件:
## Chapter 3
This is my chapter 3.
在R控制台中,运行:
library(stringi)
subRender <- function(mdfile, flist) {
#replace <<insertHTML:flist with actual html code
#but without beginning white space
rmdlines <- readLines(mdfile)
toSubcode <- paste0("<<insertHTML:[",flist,"]")
locations <- sapply(toSubcode, function(xs) which(stri_detect_fixed(rmdlines, xs)))
subfiles <- lapply(flist, function(f) stri_trim(readLines(f)))
strlens <- sapply(subfiles,length)
#render html doc
newRmdfile <- tempfile("temp", getwd(), ".Rmd")
#insert flist at specified locations
#idea from @Marek in [2]
alllines <- c(rmdlines[-locations], unlist(subfiles))
ind <- c( (1:length(rmdlines))[-locations],
unlist(lapply(1:length(locations), function(n) locations[n] + seq(0, 1, len=strlens[n])/1.1 )) )
sortedlines <- alllines[order(ind)]
#render html
write(sortedlines, newRmdfile)
rmarkdown::render(newRmdfile, "html_document")
shell(gsub(".Rmd",".html",basename(newRmdfile),fixed=T))
} #end subRender
subRender(mdfile="bookstruct.Rmd",
flist=list("chapters/chapter2.Rmd", "chapters/chapter3.Rmd"))