当尝试将包含脚本中的行knit的.Rmd转换为父.Rmd时,这些块不完整,只会形成代码块.我希望能够正常输出文件.read_chunkpurlknit
main.Rmd
---
output: html_document
---
```{r, include=FALSE}
knitr::read_chunk("script_chunk.R")
```
### Print sessionInfo()
```{r, ref.label='script_chunk', eval=FALSE}
```
Run Code Online (Sandbox Code Playgroud)
script_chunk.R
# ---- script_chunk
sessionInfo()
Run Code Online (Sandbox Code Playgroud)
当我处理这个时,knit("main.Rmd", "output.Rmd")会生成以下文件:
---
output: html_document
---
### Print sessionInfo()
```r
sessionInfo()
```
Run Code Online (Sandbox Code Playgroud)
但是,块的所需输出是:
```{r script_chunk}
sessionInfo()
```
Run Code Online (Sandbox Code Playgroud)
当我knit 输出.Rmd时,我只得到一个未评估的代码块,因为该块缺少花括号(最好是块名称).
我可以readLines用来实现我所追求的目标,例如:
```{r, results='asis', collapse=TRUE, echo=FALSE}
cat("```{r script_chunk}\n")
cat(paste(readLines("script_chunk.R"), "\n", collapse = ""))
cat("```\n")
```
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方式来做到这一点?
有一个稍微更优雅的解决方案:
# 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")
```
Run Code Online (Sandbox Code Playgroud)
但请记住,就你的knitr关注而言,你的输出是明显的Markdown.knitr只能输出到某些格式:LaTeX,Sweave,HTML,Markdown或Jekyll.虽然您的输出文件具有.Rmd扩展名,但其内容是纯Markdown,因为这是R Markdown文件的默认值.
因此请注意,输出中所需的所有代码块都必须写为动态输出.哪个可能会留下混淆代码main.Rmd.