使用 Rmarkdown 嵌入 Rmarkdown,无需 knitr 评估

Embed Rmarkdown with Rmarkdown, without knitr evaluation

我想演示如何编写 RMarkdown,其中所述 RMarkdown 演示嵌入在用于创建课程 material 的 RMarkdown 文档中。在这个受保护的代码块中,我 希望 knitr 执行该代码块。

我想将类似的内容放入我的 "top level" Rmarkdown 文档中,并在输出 HTML 文档中以固定宽度逐字打印外围栏之间的所有内容,而不是让 knitr评估内部嵌入式 R 代码块和内联代码。

```
---
title: "RMarkdown teaching demo"
author: "whoever"
---

# Major heading

Here's some text in your RMarkdown document. Here's a code chunk:

```{r, eval=FALSE}
head(mtcars)
```

Now we're back into regular markdown in our embedded document.

Here's inline code that I don't want executed either; 
e.g. mean of mpg is `r mean(mtcars$mpg)`.

```

我试过 zero-width space trick in knitr example 65,但是在尝试编译为 PDF 时失败(我需要 HTML 和 PDF)。

不确定 pdf 输出,但围绕您的演示 rmarkdown 使用:

<pre>
...
</pre>

似乎适用于 html。

这是实现它的一种方法。可以在chunk header前加上`r ''`这样code chunk不被识别,用knitr::inline_expr()生成`r `.

````
---
title: "RMarkdown teaching demo"
author: "whoever"
---

# Major heading

Here's some text in your RMarkdown document. Here's a code chunk:

`r ''````{r, eval=FALSE}
head(mtcars)
```

Now we're back into regular markdown in our embedded document.

Here's inline code that I don't want executed either; 
e.g. mean of mpg is `r knitr::inline_expr('mean(mtcars$mpg)')`.

````

如果您将 R Markdown 示例文档保存在一个单独的文件中,并通过 readLines() 将其包含在顶级文档中会更容易,例如

````
`r paste(readLines('example.Rmd'), collapse = '\n')`
````

要在围栏代码块中包含三个反引号,您需要三个以上的反引号。这就是为什么我在这里使用四个。

我使用 cat 函数执行此操作,该函数适用于 HTML 和 PDF 输出。

---
title: "RMarkdown teaching demo"
author: "whoever"
---

# Major heading

Here's some text in your R Markdown document. Here's a code chunk:

```{r, echo=FALSE, comment=""}
cat(c("```{r, eval=FALSE}",
      "head(mtcars)",
      "```"), 
    sep='\n')
```

Now we're back into regular Markdown in our embedded document.

Here's inline code that I don't want executed either: 

```{r, echo=FALSE, comment=""}
cat("The mean of mpg is `r mean(mtcars$mpg)`.")
```

适用于 R Markdown 2.1 的简​​单解决方案涉及使用空格和转义标记:

````    ```{r, eval=FALSE}    ````  
```head(mtcars)```  
````    ```    ````

注意每一行都是单独转义的。四个刻度线和三个刻度线之间有四个空格。并且在第一行和第二行的最后一个刻度线之后有两个空格来插入换行符。