在RMarkdown中eval = FALSE时取消注释(#)

时间:2014-06-14 18:26:35

标签: r knitr r-markdown

我想使用冗长的数据框,但只在幻灯片中显示部分数据框。

```{r}
df1 = data.frame(x = rnorm(100), y = rnorm(100))
df1
```

正如您可能猜到的,这会产生不适合演示文稿幻灯片的输出。

```{r eval=-2, echo=-3}
df1 = data.frame(x = rnorm(100), y = rnorm(100))
df1
head(df1)
```

这会产生:

df1 = data.frame(x = rnorm(100), y = rnorm(100))
## df1

x       y
1  0.7699 -0.1683
2 -0.4756  0.3885
3 -0.6744  1.2755
4 -0.8533 -2.1271
5 -1.9129 -1.2661
6 -0.4567  0.5607

但我不希望第二个代码行被注释掉。目前,我能想出的唯一方法是使用两个单独的代码块,因为eval=FALSE在应用于整个块时不会产生注释代码。

这产生了我想要的东西:

```{r eval=FALSE}
df1 = data.frame(x = rnorm(100), y = rnorm(100))
df1
```

```{r echo=FALSE}
df1 = data.frame(x = rnorm(100), y = rnorm(100))
head(df1)
```

但显然,如果我更改代码,我必须在两个地方更改它。这是一个简单的例子,但是对于更复杂的代码,我编辑代码和结果时会有更大的危险。

1 个答案:

答案 0 :(得分:2)

试试这个:

```{r include = FALSE}
library(knitr)
op <- knit_hooks$get()$source
knit_hooks$set(source = function(x, options) op(if(is.numeric(options$eval)) x[options$eval] else x, options))
```

```{r eval=-2, echo=-3}
df1 = data.frame(x = rnorm(100), y = rnorm(100))
df1
head(df1)
```

这适用于简单的情况,但如果要合并echoeval,则需要进行优化。