Rmarkdown - Como exibir condicionalmente textos

Pessoa, bom dia!

Gostaria de preparar um relatório em rmarkdown mas gostaria que chunks de código e textos só fossem executados caso o valor de uma variável seja, por exemplo, TRUE.

   ```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)

mostra_a <- TRUE
mostra_b <- FALSE
```

## R Markdown
Bla bla bla bla bla

O tópico A é `r mostra_a` e o tópico B é `r mostra_b`

<!-- Quero aqui mostrar um texto quando A é TRUE -->

<!-- E não mostrar B pois B é false -->

Pensei em atrelar o valor de ‘include’ ao valor da variável, mas não consegui inserir o bloco de texto/markdown a partir disso. Alguma ideia?

Muito obrigado!

Oi Dornelles!
Elaborei um exemplo abaixo com a forma que pensei, me avise se não estiver claro.
O mais importante nesses exemplos é a opção de chunk results='asis' e o uso de alguma função para combinar as coisas (eu dei exemplo com cat e o glue, mas prefiro glue).

---
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)

mostra_a <- TRUE
mostra_b <- FALSE
```


O tópico A é `r mostra_a` e o tópico B é `r mostra_b`

<!-- Exemplos onde o tópico A é verdadeiro -->

```{r echo=FALSE, results='asis'}
if(mostra_a == TRUE){
  cat("Aqui coloco um texto caso o topico A seja verdadeiro. Podemos usar marcação markdown aqui, por exemplo: **texto em negrito**. O valor de mostra_a é ", mostra_a, ".")
}
```


```{r echo=FALSE, results='asis'}
if(mostra_a == TRUE){
  glue::glue(
    "Aqui coloco um texto caso o topico A seja verdadeiro, e usando a função `glue::glue`. Essa função deixa a gente colar códigos no meio de textos de forma mais fácil usando as chaves. Por exemplo: o valor de mostra_a é {mostra_a}."
  )
}
```

<!-- E não mostrar B pois B é false -->


```{r echo=FALSE, results='asis'}
if(mostra_b == TRUE){
  glue::glue(
    "Aqui coloco um texto caso o topico B seja verdadeiro, e usando a função `glue::glue`.."
  )
}
```

Você também pode transformar os objetos mostra_a e mostra_b em parâmetros no seu relatório:

---
title: "Untitled"
output: html_document
params: 
  mostra_a: TRUE
  mostra_b: FALSE
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```


O tópico A é `r params$mostra_a` e o tópico B é `r params$mostra_b`

<!-- Exemplos onde o tópico A é verdadeiro -->

```{r echo=FALSE, results='asis'}
if(params$mostra_a == TRUE){
  cat("Aqui coloco um texto caso o topico A seja verdadeiro. Podemos usar marcação markdown aqui, por exemplo: **texto em negrito**. O valor de mostra_a é ", params$mostra_a, ".")
}
```


```{r echo=FALSE, results='asis'}
if(params$mostra_a == TRUE){
  glue::glue(
    "Aqui coloco um texto caso o topico A seja verdadeiro, e usando a função `glue::glue`. Essa função deixa a gente colar códigos no meio de textos de forma mais fácil usando as chaves. Por exemplo: o valor de mostra_a é {params$mostra_a}."
  )
}
```

<!-- E não mostrar B pois B é false -->


```{r echo=FALSE, results='asis'}
if(params$mostra_b == TRUE){
  glue::glue(
    "Aqui coloco um texto caso o topico B seja verdadeiro, e usando a função `glue::glue`.."
  )
}
```
2 curtidas

Bea,

Muito obrigado! Era exatamente o que eu precisava!

Obrigado também por lembrar da possibilidade de colocar como parâmetros :slight_smile:

1 curtida