如何根据knitr中的条件包含标题

时间:2016-02-23 23:06:15

标签: r knitr

我有一个标题,后跟一个Rmd文件中的代码块。如果满足条件,我只想包含此标题和后跟它的块。我知道如何使用块,因为它在代码的主体中,但我如何做前者?

```{r}
 print_option <- TRUE
```

## My header
```{r}
 if(print_option==TRUE) {
 print (x)
 }
```

2 个答案:

答案 0 :(得分:8)

chunk option evalasis_output()提供了一个简单的解决方案。

假设print_option是一个布尔值,表示是否显示标题(以及是否在块print(1:10)中执行其他代码,如example1):

```{r setup}
library(knitr)
print_option <- TRUE
```

```{r, eval = print_option}
asis_output("## My header\\n") # Header that is only shown if print_option == TRUE
print(1:10) # Other stuff that is only executed if print_option == TRUE
```

Text that is shown regardless of `print_option`.

```{r setup2}
print_option <- FALSE
```

Now `print_option` is `FALSE`. Thus, the second header is not shown.

```{r, eval = print_option}
asis_out("## Second header\\n")
```

<强>输出:

Output

对于较长的条件输出(文本/降价,没有嵌入的R代码),engine asis可能会有所帮助,请参阅this answer(它很长,但解决方案最后是非常简洁的。)

附录

为什么## `r Title` Title设置为"My header""",如this answer中的建议一样糟糕?因为它会创建一个&#34;空标题&#34;在第二种情况下。此标头在呈现的HTML / markdown输出中不可见,但它仍然存在。请参阅以下示例:

```{r, echo = FALSE}
title <- ""
```

## `r title`

这会产生以下降价......

## 

...和HTML:

<h2></h2>

除了在语义上无意义之外,它可能会导致布局问题(取决于样式表)并破坏文档大纲。

答案 1 :(得分:0)

我明白了:)

    ```{r, echo=FALSE,  include=FALSE}
    x<- FALSE
    if ( x ) {
      Title <- "My header"
    } else {Title=""}
    ```
    ## `r Title` 
    ```{r, echo=FALSE}
    if(x) {
    print(1:10)
    }
    ```