在最终输出中显示R markdown块

时间:2013-11-11 13:57:28

标签: r markdown knitr slidify

我正在使用Knitr,Markdown和Slidify进行演示。幻灯片将部分处理Knitr作为主题,这就是我陷入困境的原因。我不能包括例如knitr-markdown chunk来在幻灯片上显示它。即使我做了类似的事情,它也会在第一次运行时被解释:

```
```{r eval = F, include = T}

```
``` 

如何防止块被解释并因此从最终输出中删除,以便我可以在使用Markdown和Knitr时显示块的结构?

编辑:

我尝试了@Ramnath的版本并制作了以下幻灯片:

## Testslide 1

```{r verbatimchunk, verbatim = TRUE}
x = 1 + 1
x
```

```{r regularchunk}
x = 1 + 1
x
```

---

## Testslide 2

```{r verbatimchunk_2, verbatim = TRUE}
x = 1 + 1
x
```

* element 1
* element 2

---

## Testslide 3

* element 1
* element 2


```{r verbatimchunk_3, verbatim = TRUE}
x = 1 + 1
x
```

前两张幻灯片工作正常,但最后一张是问题。如果在逐字块之前有一个项目符号列表,则会像往常一样进行解释。所以它与@Scott的第一个解决方案相同。我不明白。

EDIT 2/3(工作解决方案)

```{r echo = FALSE}
require(knitr)
hook_source_def = knit_hooks$get('source')
knit_hooks$set(source = function(x, options){
  if (!is.null(options$verbatim) && options$verbatim){
    opts = gsub(",\\s*verbatim\\s*=\\s*TRUE\\s*", "", options$params.src)
    bef = sprintf('\n\n    ```{r %s}\n', opts, "\n")
    stringr::str_c(bef, paste(knitr:::indent_block(x, "    "), collapse = '\n'), "\n    ```\n")
  } else {
     hook_source_def(x, options)
  }
})
```

## Testslide

* Element one
* Element two


Some text here breaks list environment:

```{r verbatim = T}
any code
```

3 个答案:

答案 0 :(得分:3)

我认为你需要在```{r}之后添加一个空字符串,而knitr将不会执行该块,但会显示它。请参阅示例here

这张幻灯片适用于我(顶部执行,底部不执行)

---

```{r}
list(5, 6, 7)
```


    ```{r}`r ''`
    hist(rnorm(100))
    5 + 6
    ```

---

答案 1 :(得分:3)

这是另一个使用块钩子的解决方案。这个想法是,如果你有一个带有选项verbatim = TRUE的块,它会激活钩子并逐字输出块。我已经检查过它也适用于Slidify。

```{r echo = FALSE}
require(knitr)
hook_source_def = knit_hooks$get('source')
knit_hooks$set(source = function(x, options){
  if (!is.null(options$verbatim) && options$verbatim){
    opts = gsub(",\\s*verbatim\\s*=\\s*TRUE\\s*", "", options$params.src)
    bef = sprintf('\n\n    ```{r %s}\n', opts, "\n")
    stringr::str_c(bef, paste(knitr:::indent_block(x, "    "), collapse = '\n'), "\n    ```\n")
  } else {
     hook_source_def(x, options)
  }
})
```

```{r verbatimchunk, verbatim = TRUE}
x = 1 + 1
x
```

```{r regularchunk}
x = 1 + 1
x
```

编辑:列表后面的代码块的技巧是列表环境需要被破坏。一种快速而肮脏的方法就是添加一个空的段落元素。或者,您可以修复挂钩,以便在代码块的开头自动添加空段落。

* element 1
* element 2

<p></p>
```{r verbatimchunk_3, verbatim = TRUE}
x = 1 + 1
x
```

答案 2 :(得分:0)

参加聚会很晚,但这似乎也可行:

```{r echo=FALSE, class.output="r", comment=""}
cat("```{r}\nx <- 1 + 1\nx\n```")
```

或者,等效但也许更好的读写方式:

```{r echo=FALSE, class.output="r", comment=""}
cat(paste(sep = "\n",
  "```{r}",
  "x <- 1 + 1",
  "x",
  "```"
))
```