我正在使用knitr来解析R Markdown文档.是否有办法根据我传入knitr的环境中的变量有条件地显示R Markdown中的文本块?
例如,类似于:
`r if(show.text) {` la la la `r }`
如果show.text
是真的,将在生成的文档中打印"la la la" .
你需要一个完整的R表达式,所以你不能像你展示的那样把它分成多个块,但是如果一个块的结果是一个文本字符串,那么它将按原样包含(没有引号),所以你应该能够做一些事情喜欢:
`r if(show.text){"la la la"}`
它将包括文本,当且仅当show.text
是TRUE
.
您可以使用"eval"块选项执行此操作.见http://yihui.name/knitr/options/.
```{r setup, echo=FALSE} show_text <- FALSE ```` ```{r conditional_block, eval=show_text} print("this will only print when show.text is TRUE") ```
我一直在使用YAML配置文件来参数化我的降价报告,这使它们更具可重用性.
```{r load_config} library(yaml) config <- yaml.load_file("config.yaml") ```
...
```{r conditional_print, eval=config$show_text} print("la la la") ````
通过将所有文本放入单独的文件中然后将其包含在主文件中,我发现最简单的方法是:
```{r conditional_print, child='text.Rmd', eval = show_text} ```
这样做的好处是,您仍然可以将内联R语句或其他块放入子文件中,这样,如果您改变主意关于什么算作可选文本,则无需重构项目.
这是对Paul Boardman的方法的一个调整,它在输出中给出了适当的标记.
```{r setup, echo=FALSE} show_text <- FALSE ``` ```{r conditional_block, echo=FALSE, results='asis', eval=show_text} cat("## Hey look, a heading! lorem ipsum dolor emet...") ```
更好的是,如果我们调用python引擎来生成输出,我们可以使用三重引用来轻松处理包含单引号或双引号的文本,而无需做任何花哨的事情:
```{python, conditional_block_py, echo=FALSE, results='asis', eval=show_cond_text} print(""" ## Still a heading Block of text with 'single quotes' and "double quotes" """) ```