如何在 knitr RMD 文件中设置不同的全局选项

J_F*_*J_F 0 r knitr r-markdown

我想在我的 RMD 文件中排除很多代码块,并有想法在eval = FALSE之前和eval = TRUE之后设置全局选项。但这是行不通的。

这是一个玩具示例:

---
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, eval = FALSE)
```
## will not be executed because global option `eval = FALSE`
```{r}
x+y
```

```{r setup II, include=FALSE}
knitr::opts_chunk$set(eval = TRUE, echo = TRUE)
```
## Should give `2` in final document, because eval = TRUE
## NOT working as expected
```{r}
1+1
```

## This is working as expected
```{r, eval = TRUE}
1+1
```
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此处输入图片说明

这是错误还是功能?在我看来,这违反直觉......

Yih*_*Xie 7

这不是错误或功能,而是意料之中的。您eval = FALSE在第一个代码块中设置,这意味着不会评估第二个代码块,因此knitr::opts_chunk$set(eval = TRUE, echo = TRUE)根本没有执行。然后eval仍然FALSE是第三个代码块。

您需要eval = TRUE在第二个代码块上设置:

```{r setup II, include=FALSE, eval=TRUE}
knitr::opts_chunk$set(eval = TRUE, echo = TRUE)
```
Run Code Online (Sandbox Code Playgroud)