尝试将knit
包含read_chunk
个purl
行的 .Rmd 行添加到父 .Rmd 时,这些块不完整,只有表单代码块。我希望能够正常knit
输出文件。
main.Rmd
---
output: html_document
---
```{r, include=FALSE}
knitr::read_chunk("script_chunk.R")
```
### Print sessionInfo()
```{r, ref.label='script_chunk', eval=FALSE}
```
script_chunk.R
# ---- script_chunk
sessionInfo()
当我使用knit("main.Rmd", "output.Rmd")
处理时,会生成以下文件:
---
output: html_document
---
### Print sessionInfo()
```r
sessionInfo()
```
但是,块的所需输出是:
```{r script_chunk}
sessionInfo()
```
当我knit
output.Rmd 时,我只得到一个未评估的代码块,因为该块缺少花括号(最好是块名称)。
我可以使用readLines
来实现我之后的目标,例如:
```{r, results='asis', collapse=TRUE, echo=FALSE}
cat("```{r script_chunk}\n")
cat(paste(readLines("script_chunk.R"), "\n", collapse = ""))
cat("```\n")
```
有更优雅的方法吗?
答案 0 :(得分:6)
有一个略微更优雅的解决方案:
# main.Rmd
---
output: html_document
---
### Print sessionInfo()
```{r, results="asis", echo = FALSE}
chunk_lines <- knitr::spin(text = readLines("script_chunk.R"), knit = FALSE)
cat(chunk_lines, sep = "\n")
```
但请记住,就knitr
而言,你的输出是明显的Markdown。 knitr
只能output to certain formats:LaTeX,Sweave,HTML,Markdown或Jekyll。虽然您的输出文件具有.Rmd
扩展名,但其内容是明确的Markdown,因为它是R Markdown文件的默认值。
请注意,输出中所需的所有代码块都必须写为动态输出。这可能会在main.Rmd
中留下混淆的代码。
答案 1 :(得分:3)
我使用的替代方法是使用knit_child
:
main.Rmd
---
output: html_document
---
```{r, include=FALSE}
out <- knitr::knit_child("script_chunk.Rmd")
```
### Print sessionInfo()
```{r, ref.label='script_chunk'}
paste(out, collapse = "\n")
```
script_chunk.Rmd
```{r script_chunk}
# ---- script_chunk
sessionInfo()
```
编译时:
---
output: html_document
---
### Print sessionInfo()
```r
# ---- script_chunk
sessionInfo()
```
```
## R version 3.3.3 (2017-03-06)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 16299)
## ... blah blah blah ...
```
思想:
out
是一个可怕的名字; out
可以包含对{{1}的多个调用的连接结果}