当运行knit到.Rmd输出时,块无效

Kev*_*eau 4 r knitr

问题

当尝试将包含脚本中的行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)

有没有更优雅的方式来做到这一点?

Nat*_*rth 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")
```
Run Code Online (Sandbox Code Playgroud)

但请记住,就你的knitr关注而言,你的输出是明显的Markdown.knitr只能输出到某些格式:LaTeX,Sweave,HTML,Markdown或Jekyll.虽然您的输出文件具有.Rmd扩展名,但其内容是纯Markdown,因为这是R Markdown文件的默认值.

因此请注意,输出中所需的所有代码块都必须写为动态输出.哪个可能会留下混淆代码main.Rmd.