R内联Markdown

6
我正在使用RStudio中的R Markdown创建混合Markdown和R输出的报告。我知道如何在Markdown中使用内联R表达式,但我想知道如何做相反的事情,即在R代码中使用Markdown。我想循环执行一系列计算,并为每个计算获取Markdown标题。我需要标题以进行格式设置(例如,粗体标题等),还可以在生成的PDF文件中指定(子)部分(这是RMarkdown处理#和##等的一项不错的功能)。
我知道我可以执行以下操作:
---
title: "test"
output: pdf_document
---

#Section 1

```{r, echo=FALSE}
print(1+1)
```

#Section 2

```{r, echo=FALSE}
print(2+2)
```

#Section 3

```{r, echo=FALSE}
print(3+3)
```

这将会生成类似于以下输出:

第一部分

## [1] 2

第二部分

## [1] 4

第三部分

## [1] 6

使用以下方式是否可以达到相同的输出结果:

---
title: "test2"
output: pdf_document
---

```{r, echo=FALSE}
for (i in 1:3)
{
  print(paste("#Section",i))
  print(i+i)
}
```

如果您设置了块选项results="asis",则cat(paste("# section",i,"\n"))应该可以实现。 - scoa
谢谢scoa,输出结果稍微好看一些,但并没有达到我想要的效果:#被解释为字符并打印出来,而不是解释为Markdown标签以创建标题。 - Russell.Hobbs
感谢@scoa。很遗憾,我还没有成功。我尝试使用cat(paste("\n","# section",i,"\n\n"))来确保之前有一个空行,但是我得到的输出是# section 1而不是section 1 - Russell.Hobbs
即使在代码块选项中使用 results="asis",也无法输出结果? {r, echo=FALSE,results="asis"}?那很奇怪,这在我的电脑上是可以的。 - scoa
@scoa 是的,我已经将 results="asis" 作为代码块选项。但是你是否得到了类似于我的示例格式化输出的结果?你的 .Rmd 文件设置为 output: pdf_document 了吗? - Russell.Hobbs
显示剩余2条评论
2个回答

4
如@scoa所指出的那样,您需要设置chunk选项results='asis'。您还应该在标题前后都放置两个\n
---
title: "test"
output: pdf_document
---

```{r, echo=FALSE, results='asis'}
for (i in 1:3) {
  cat(paste0("\n\n# Section", i, "\n\n"))
  print(i+i)
  cat("\n\n\\newpage")
}
```

谢谢Christoph。经过一些尝试,我弄清楚了为什么它对我不起作用——我在RStudio中将我的代码块标签化,以便在粘贴到StackOverflow时显示为代码块。这干扰了块选项的读取。所以,scoa是正确的——关键是包含results='asis'。我不确定这里的礼节是什么,但我觉得@scoa应该得到荣誉——如果他(她)添加答案,我会将其标记为解决方案。 - Russell.Hobbs
当然,我并不是要抄袭他的答案。让他写一个答案并标记它(虽然你可以暂时将我的答案标记为有用)。干杯! - Christoph

0
作为更一般性的答案,可以看一下markdownreports包,它可以解析您的R变量中的markdown代码(和输出)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接