R-markdown:在回显代码和结果输出之间添加一个空行

R-markdown: Add an empty line between echoed code and result output

要在 knitr 中组合回显的 R 代码和输出结果,有一个方便的 collapse=TRUE 选项。但是默认情况下,它们之间没有 space,即给定以下 Rmd:

```{r, echo=TRUE, include=TRUE, collapse=TRUE}
x <- matrix(1:6, nrow=2)
x
```

它会产生包含在 <pre> 标签中的输出:

x <- matrix(1:6, nrow=2)
x
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6

我想要的是得到一个空行来分隔输出和代码,但仍然组合成一个 <pre> 元素。

x <- matrix(1:6, nrow=2)
x

##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6

有办法实现吗?我尝试在 R 块的末尾添加一个空行,但它似乎已被删除。

```{r, echo=-3, include=TRUE, collapse=TRUE}
x <- matrix(1:6, nrow = 2)

x
```

这将添加一个 space 而 echo = -3 不会 return 第三行,因此 returning:

x <- matrix(1:6, nrow = 2)

##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6

您可以定义一个新的块选项而不是 collapse 使用 knitr 块钩子来折叠代码和带有额外空格的输出。例如,您可以在设置块中包含:

Rmarkdown

---
output: html_document
---

```{r setup, include=FALSE}
hook_chunk = knitr::knit_hooks$get('chunk')

knitr::knit_hooks$set(chunk = function(x, options) {
  regular_output = hook_chunk(x, options)
  # collapse with vspace if collapse_vspace is TRUE
  if (isTRUE(options$collapse_vspace))
    gsub("```\n\n```", "", regular_output)
  else
    regular_output
})

knitr::opts_chunk$set(collapse_vspace = TRUE)
```

```{r, echo = TRUE}
x <- matrix(1:6, nrow=2)
x
```

HTML输出

一些有用的参考资料: