代码之家  ›  专栏  ›  技术社区  ›  J_F

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

  •  0
  • J_F  · 技术社区  · 7 年前

    我想在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
    ```
    

    结果如下:

    enter image description here

    这是一个bug还是一个特性?在我看来,这是违反直觉的。。。

    1 回复  |  直到 6 年前
        1
  •  8
  •   Yihui Xie    7 年前

    这不是一个bug或特性,而是预期的。您已设置 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)
    ```