5. Incluindo códigos ao relatório

O grande diferencial dos arquivos escritos em Rmarkdown é a possibilidade de incluir trechos de códigos (em inglês: code chunks) no texto. Esta etapa é fundamental para que nosso relatório possua dados, que podem ser reprodutíveis e sempre atualizados. Dentro dos chunks iremos inserir códigos que produzam análises, tabelas e figuras, tornando nosso documento de texto mais interessante e complexo. Nesta subseção, iremos aprender a mesclar esses trechos de códigos em nossos documentos, personalizá-los. Assim, iremos transformar nosso arquivo .Rmd em um arquivo que poderá ser enviado para o secretário de saúde do Estado de Rosas, para a imprensa e até mesmo disponibilizado de forma online em um website.

Vamos lá!

Até aqui vimos que os chunks são trechos para inclusão de código em R. Esses códigos deverão ser delimitados no início da sua escrita por três acentos graves ( ``` ) seguido do código {r} (uma letra "r" minuscula entre colchetes). Para encerrar a inserção dos códigos basta novamente você incluir os três acentos graves ( ``` ). Elas irão indicar a finalização do trecho de código.

Pareceu difícil? Calma, iremos detalhar passo a passo nesta seção do curso. Lembre-se que no seu texto o chunk será indicado por uma área sombreada (Figura 38). Essa área avisa que o código a ser interpretado para o relatório está na linguagem R.


Figura 38: Área do script para inserção de códigos.


Tente se lembrar da Figura 5 no início deste curso ou volte a unidade dois do curso e observe o chunk destacado em a. Ao clicar nas pequenas setas ao lado do número das linhas no RStudio (item b do desenho), você ocultará todo o código neste trecho. Veja na Figura 39 como podemos facilitar a escrita do documento como um todo quando estamos escrevendo um arquivo .Rmd. A possibilidade de ocultar o chunk um recurso interessante que pode facilitar a visualização do documento.


Figura 39: Ocultando o chunk do scriptRmarkdown.


Agora observe também que no item b da Figura 38 você visualiza três símbolos diferentes. Ao clicar na roda dentada (Figura 40), o RStudio irá abrir um pequeno menu com opções para este código. Observe e replique esta etapa em seu computador.


Figura 40: Configurando o chunk em um scriptRmarkdown.


Neste menu é possível nomear o trecho de código em Chunk Name, se assim desejar. Caso decida nomear estes trechos de códigos, faça com atenção pois para que o chunk funcione sem erros não poderá haver nomes repitidos. Se houver um nome repetido o R irá apresentar erro no momento de renderização do arquivo, lhe impedindo de gerar o documento final.

Agora observe a caixa de nome output na Figura 40. Ela permitirá que você escolha cinco possibilidades para configuração de exibição do código no momento da renderização para o documento final. Observe esta etapa na Figura 41 e a descrição das opções na Tabela 3 abaixo.


Figura 41: Configurando o output do chunk em um script Rmarkdown.


Tabela 3: Configurando o output do chunk em um script Rmarkdown.


Ao selecionar cada uma dessas opções, você irá observar que um novo argumento irá aparecer na primeira linha do seu trecho de código (ao lado do trecho entre colchetes {r}). Por exemplo, após incluirmos o nome para este trecho de código como “código 1”, e selecionar “Show output only”, obteremos um chunk semelhante à Figura 42. Repita esta etapa em seu RStudio e visualize em seu computador.


Figura 42: Configurando ”Show output only”** do chunk em um script Rmarkdown.**


Agora vamos utilizar esses argumentos para customizar como nossos trechos de chunks serão inseridos no documento final (renderizado). Lembre-se, que a estrutura entre as chaves deverá seguir a seguinte lógica: {r nome do trecho de código, argumento 1, argumento 2, ...}.

  • O echo: Indica se o código irá aparecer no documento final, enquanto sempre mostra o output . O valor do echo, por padrão, permenece como sendo igual a TRUE. Neste caso, o código e o output são apresentados no documento final. Observe o código no arquivo .Rmd conforme Figura 43:


Figura 43: Configurando echo** escolhida para o chunk em um script Rmarkdown.**


Agora veja como visualizamos em um arquivo renderizado conforme Figura 44. Replique esta etapa em seu RStudio e renderize seu código.


Figura 44: Renderizando a configuração echo = TRUE** escolhida para o chunk em um script Rmarkdown.**


Fica bem interessante, não é mesmo? Agora, se você optar para o valor de echo = FALSE, apenas o output é mostrado no documento final, e o código em R fica oculto, conforme a Figura 45.


Figura 45: Renderizando a configuração echo = FALSE** escolhida para o chunk em um script Rmarkdown.**


  • O include: Indica se o código irá aparecer no documento final. Por padrão, o seu valor é igual a TRUE. Neste caso, o código será mostrado como o exemplo na Figura 46. Veja esta configuração no arquivo .Rmd:


Figura 46: Configurando include = TRUE** escolhida para o chunk em um script Rmarkdown.**


Agora veja como visualizamos em um arquivo renderizado (Figura 47). Replique o código desta etapa em seu RStudio e renderize-o.


Figura 47: Renderizando a configuração include = TRUE** escolhida para o chunk em um script Rmarkdown.**


Quando definido o argumento include igual a FALSE, ele irá ocultar do documento final o código em R e o seu output. Note que este comportamento se diferencia do comando echo, que quando definido como FALSE, omite apenas o código, mas apresenta o output no documento final.


Embora, tenha sido possível definir se o código ou output poderiam ser ocultados ou não utilizando os comandos anteriores. É importante que você saiba que os códigos dentro do trecho sempre são executados. O que muda é se iremos ou não visualizá-lo quando o documento é renderizado.


  • O eval: Indica se o código deve ser executado (Figura 48). Com o comando eval é possível escolher se o código deverá ser executado no momento em que o documento é renderizado (gerado) ou não. Por padrão, o seu valor é igual a TRUE. Veja como fica o código no arquivo .Rmd visualizado na Figura 48:


Figura 48: Configurando eval = TRUE** escolhida para o chunk em um script Rmarkdown..**


Por sua vez, é possível também configurar o eval e definir que o código apareça no documento final, mas sem que seja executado conforme a Figura 49 dando valor FALSE a ele.


Figura 49: Renderizando eval = FALSE** escolhida para o chunk em um script Rmarkdown.**


Agora veja como visualizamos em um arquivo renderizado conforme Figura 50. Replique o código desta etapa em seu RStudio e renderize-o.


Figura 50: Renderização Renderizando eval = FALSE** escolhida para o chunk em um script Rmarkdown.**


Além destes comandos, é possível definir se mensagens do console irão ser mostradas no documento final, conforme a Tabela 4:


Tabela 4: Argumentos de configuração das mensagens do console no script em um script Rmarkdown.


Ainda temos alguns trecho de código para detalhar no arquivo .Rmd então vamos lá. Continuaremos aprendendo sobre os componentes presentes no destaque b da Figura 38. Você verá o ícon RUN: o símbolo .

Este símbolo irá executar na própria sessão do RStudio o código presente no trecho de código escolhido. Esta função facilita com que o script em R digitado possa ser testado antes da geração do documento final. Veja na Figura 51 como seria executar um código no chunk.


Figura 51: Tela de executando do chunk em um script Rmarkdown.


Perceba que um novo quadro aparece abaixo do trecho de código. Nas Figuras 52 A, 52 B e 52 C, você verá três ícones em vermelho com algumas opções, veja:


Figura 52 A: Ícone do chunk em uma nova janela.

: abre o output em uma nova janela.


Figura 52 B: Ícone do chunk oculta os detalhes do quadro de output.

: oculta os detalhes do quadro de output.


Figura 52 C: Ícone do chunk fecha o quadro output.

: fecha o quadro output.


Por fim, o símbolo executa todos os trechos de códigos anteriores ao chunk atual. Esta função pode ser interessante caso você deseje iniciar a execução do código a partir de um determinado ponto do documento, sem a necessidade de rodar os trechos de códigos anteriores um a um. Você os rodará em bloco.


5.1 Escrevendo os códigos de um relatório

Agora que entendemos como editar os chunks, vamos preparar nosso relatório para gerar gráficos e tabelas a partir de códigos em R. O primeiro passo é organizarmos o nosso ambiente de análise nos seguintes passos:

  1. Carregar os pacotes que serão utilizados.
  2. Carregar as bases de dados.
  3. Armazenar os dados carregados em objetos que serão utilizados posteriormente.


Atenção

Lembre-se que você pode acessar a qualquer momento o curso “Análise de dados para a vigilância em saúde – curso básico” e o curso “Visualização de dados de interesse para a Vigilância em Saúde”, obtendo os códigos desejados para a confecção do seu relatório. Caso não tenha feito os cursos, sugerimos que se inscreva neles. Maiores informações em https://www.abrasco.org.br/site/analise-de-dados-para-a-vigilancia-em-saude/


Observe como você deverá preencher o chunk para executar o primeiro passo da nossa análise (carregar os pacotes que serão utilizados):

# Carregando os pacotes necessários
require(foreign)
require(tidyverse)
require(lubridate)
require(kableExtra)

Vamos lá! Estamos construindo um relatório que irá apresentar a situação da dengue em Rosas para o secretário de Estado. Para isso, precisaremos utilizar dados de dengue para o Estado de Rosas. Aqui iremos utilizar como base de dados o arquivo exportado do SINAN Net chamado de NINDINET.dbf. Este arquivo está disponível no menu lateral “Arquivos” do Ambiente Virtual do curso.

Também iremos filtrar os registros de agravos relacionados à dengue e, em seguida, criaremos algumas colunas com informações-chave sobre esse agravo (semana epidemiológica, mês, e ano da data de primeiros sintomas) desses registros. Todas estas rotinas (passos 2 e 3) serão acrescidas no primeiro passo da nossa análise. Veja os comandos abaixo:

# Carregando os pacotes necessários
require(foreign)
require(tidyverse)
require(lubridate)
require(kableExtra)

# Importando o banco de dados com a função `read.dbf()`
nindi <- read.dbf(file = 'Dados/NINDINET.dbf')

# Armazenando apenas dados para dengue
dengue <- nindi |>
  # Filtrando apenas casos de dengue com a função filter()
  filter(ID_AGRAVO == 'A90') |> 
  # Criando novas colunas com a função mutate()
         # Convertendo a coluna DT_SIN_PRI (data de primeiros sintomas) para 
         # o formato de date (Date)
  mutate(DT_SIN_PRI = ymd(DT_SIN_PRI),
         # Criando nova coluna com a semana epidemiológica com o uso da função 
         # epiweek()
         sem_epi = epiweek(DT_SIN_PRI),
         # Criando nova coluna com o ano epidemiológico com o uso da função 
         # epiyear()
         ano_epi = epiyear(DT_SIN_PRI),
         # Criando nova coluna com o mês de primeiros sintomas
         mes = month(DT_SIN_PRI))

Agora replique estes códigos no chunk do seu RStudio. Recomendamos que esta parte do código seja inserida no primeiro trecho de código do seu arquivo .Rmd, pois desta forma, todos os códigos executados posteriormente já contarão com os pacotes e objetos necessários para as análises que faremos. Lembre-se que você deverá sempre verificar se todos os pacotes necessarios foram instalados instalados e carregados no R, caso encontre algum aviso (warning) ou erro (error), revise seu código e instale os pacotes necessários.


Muitas vezes os códigos que geram as tabelas e os objetos que serão utilizados demoram um longo tempo para serem processados. Porém, com experiência você aprenderá a fazer pequenos ajustes que tornarão o processo mais rápido. A repetição de códigos, por exemplo, é um dos grandes motivos que tornam o processamento de relatórios .Rmd bastante demorados.

Uma alternativa que permite otimizar o tempo é fazer a preparação das tabelas e dos objetos que serão utilizados nos relatórios automáticos em outro arquivo de script em .R, de forma separada, e salvá-los como objetos do tipo tabelas (.csv) ou em objetos do tipo dados do R (.Rdata). Depois basta mencionar esses objetos em seu arquivo .Rmd utilizando a função source() no primeiro trecho de código do seu relatório em RMarkdown. Assim, o R irá buscar a versão “pronta” de sua tabela ou objeto, reduzindo o tempo de produção do seu relatório.

Você terá como resultado um script mais sucinto e fácil de compreender por qualquer pessoa que o manusear.


Precisaremos agora configurar o chunk. Copie o trecho de código que treinamos anteriormente e o insira trechos na linha 12 do seu arquivo .Rmd. A linha 12 é a que contém o seguinte código:

knitr::opts_chunk$set(echo = TRUE)

Pronto, agora verifique se o seu arquivo .Rmd ficou semelhante a Figura 53. Veja:


Figura 53: Contrução do chunk para o script de análise da dengue do Estado de Rosas.


Note que na Figura 53 este trecho inicial de código possui o argumento include=FALSE, ou seja, configuramos o chunk para que o código seja executado apenas quando renderizarmos o documento. Além disso, não deverá exibir nenhum output.


Atenção

Caso tenha encontrado dificuldade de chegar a um arquivo com os scripts que utilizamos, não se preocupe e continue no curso!

Deixamos pronto para você um arquivo de estudo com todos os elementos que aplicamos nesta subseção: o exemplo6.Rmd. Você poderá encontrá-lo acessando o menu lateral “Arquivos” do Ambiente Virtual do curso e fazer o download.