我有一个标题,后跟一个Rmd文件中的代码块.如果满足条件,我只想包含此标题和后跟它的块.我知道如何使用块,因为它在代码的主体中,但我如何做前者?
```{r}
print_option <- TRUE
```
## My header
```{r}
if(print_option==TRUE) {
print (x)
}
```
Run Code Online (Sandbox Code Playgroud)
该块选项 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")
```
Run Code Online (Sandbox Code Playgroud)
输出:
对于较长的条件输出(文本/降价,没有嵌入的R代码),引擎 asis可能会有所帮助,请参阅此答案(它很长,但最后的解决方案非常简洁).
为什么是## `r Title`用Title设置为"My header"或""在暗示这个答案是一个坏主意?因为它在第二种情况下创建了一个"空标题".此标头在呈现的HTML/markdown输出中不可见,但它仍然存在.请参阅以下示例:
```{r, echo = FALSE}
title <- ""
```
## `r title`
Run Code Online (Sandbox Code Playgroud)
这会产生以下降价...
##
Run Code Online (Sandbox Code Playgroud)
......和HTML:
<h2></h2>
Run Code Online (Sandbox Code Playgroud)
除了在语义上无意义之外,它可能会导致布局问题(取决于样式表)并破坏文档大纲.
我想到了 :)
```{r, echo=FALSE, include=FALSE}
x<- FALSE
if ( x ) {
Title <- "My header"
} else {Title=""}
```
## `r Title`
```{r, echo=FALSE}
if(x) {
print(1:10)
}
```
Run Code Online (Sandbox Code Playgroud)