我有一个标题,后跟一个Rmd文件中的代码块。如果满足条件,我只想包含此标题和后跟它的块。我知道如何使用块,因为它在代码的主体中,但我如何做前者?
```{r}
print_option <- TRUE
```
## My header
```{r}
if(print_option==TRUE) {
print (x)
}
```
答案 0 :(得分:8)
chunk option eval
和asis_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")
```
<强>输出:强>
对于较长的条件输出(文本/降价,没有嵌入的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)
}
```