在R代码块中输出Markdown

15

我有一个R Markdown文件,我想要从脚本本身输出R Markdown。例如,我会在Rmd文件中使用以下简单代码。

---
title: "test"
author: "johndoe"
date: "September 5, 2015"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r cars}
paste("## This is a Heading in Code")
summary(cars)
```

我希望“这是代码中的标题”在rmarkdown中呈现。有一个解决方案是使用R脚本生成Markdown,可以参考http://rmarkdown.rstudio.com/r_notebook_format.html。但我正在尝试弄清楚如何在Rmarkdown文件中实现。感谢任何帮助。


1
有一个简单的方法可以直接将HTML注入到代码中。例如,用cat("<h2> This is a Heading in Code </h2>")替换paste,并将块选项设置为results="asis"。这样做是可行的,但是您会失去摘要(cars)的标记格式。我想输出Markdown语法,使其呈现并以Markdown格式输出摘要(cars)。 - yindalon
请使用两个不同的代码块,根据您的评论中提出的解决方案进行翻译。 - Gregor Thomas
啊,是的...谢谢。嗯,那是正确的。我会回答自己的问题,然后写另一个问题来表达我真正想做的事情。 - yindalon
但问题在于,我将无法输出到其他Markdown格式并且必须使用HTML。 - yindalon
2
不要使用<h2>跳转到HTML。请使用##并转到Markdown。然后,Pandoc仍然可以处理任何转换。您也不必使用cat,只需将代码块设置为print("## My heading")即可。 - Gregor Thomas
使用 results="asis"cat() 内部的 markdown 方法也适用于非 HTML 输出。然而,与 @GregorThomas 不同,print() 对我不起作用。 - fry
2个回答

19

为什么要手动构建标题标记(无论是在markdown还是HTML中)?尝试使用内联R表达式或一些pander辅助函数(以编程方式生成markdown):

---
title: "test"
author: "johndoe"
date: "September 5, 2015"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## `r 'This is a Heading in Code'`

```{r title, results='asis'}
library(pander)
pandoc.header("This is a Heading in Code", level = 2)
```

```{r cars, results='asis'}
summary(cars)
```

谢谢。问题有点傻。这个代码块在我的RStudio中无法运行。找不到函数pandoc.header。 - yindalon
pandoc.* 函数非常完美。 - Brian D

5

在使用results='asis'代码段内的cat("## Heading")后,我花了一些时间寻找一个好的答案。我看到很多人对results='asis'设置感到不满意,因为它将代码块的所有结果都设置为不包含在代码标记块中。我们有许多情况需要输出标题以及应该用标记包装的结果(例如渲染为html表格的kable表)。

这里是我找到的解决方案,只需使用knitr::asis_output指定文本对象的"asis"属性,并保持代码块处于默认的'markup'设置。

---
title: "test"
author: "johndoe"
date: "September 5, 2015"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r cars}
knitr::asis_output("## This is a Heading in Code")
summary(cars)
knitr::kable(summary(cars))
``` 

在此输入图片描述

很遗憾,目前 knitr::asis_output 只能在顶层 R 表达式中使用,在其他表达式(如 for 循环)中调用将无法正常工作。


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