有条件地在R Markdown中显示一个文本块

 Huibin_Yu_421 发布于 2022-12-27 01:33

我正在使用knitr来解析R Markdown文档.是否有办法根据我传入knitr的环境中的变量有条件地显示R Markdown中的文本块?

例如,类似于:

`r if(show.text) {`
  la la la
`r }`

如果show.text是真的,将在生成的文档中打印"la la la" .

4 个回答
  • 你需要一个完整的R表达式,所以你不能像你展示的那样把它分成多个块,但是如果一个块的结果是一个文本字符串,那么它将按原样包含(没有引号),所以你应该能够做一些事情喜欢:

    `r if(show.text){"la la la"}`
    

    它将包括文本,当且仅当show.textTRUE.

    2022-12-27 01:51 回答
  • 您可以使用"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")
    ````
    

    2022-12-27 02:03 回答
  • 通过将所有文本放入单独的文件中然后将其包含在主文件中,我发现最简单的方法是:

    ```{r conditional_print, child='text.Rmd', eval = show_text}
    ```
    

    这样做的好处是,您仍然可以将内联R语句或其他块放入子文件中,这样,如果您改变主意关于什么算作可选文本,则无需重构项目.

    2022-12-27 02:06 回答
  • 这是对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"
    """)
    ```
    

    2022-12-27 02:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有