O que é o R Markdown?

O R Markdown é uma ferramenta para criação de relatórios automatizados utilizando as linguagem R e Markdown.

A linguagem de marcação Markdown serve para construirmos e formatarmos diversos formatos de arquivos (PDF, HTML, Word, entre outros) a partir de um arquivo de texto com regras bem simples. O R Markdown é uma extensão de Markdown que nos permite colocar código de R.

Linguagens de marcação utilizam marcadores (símbolos, tags, funções) para formatar um arquivo de texto simples. Os exemplos mais famosos de linguagem de marcação são o HTML e LaTeX.

Após a construção do documento, para gerarmos o relatório na extensão desejada, precisamos renderizá-lo, isto é, transformar o arquivo R Markdown em um PDF, HTML ou Word. Isso pode ser feito no RStudio a partir do botão knit, que fica logo acima do script, ou pelo atalho CTRL + SHIFT + K.

Regras simples de formatação

Usando o R Markdown, podemos criar arquivos HTML, PDF e Word sem precisar sair do R. A grande vantagem é poder de automatização. Construindo um relatório em R Markdown, com exceção das interpretações e conclusões, só precisamos montá-lo uma vez. A partir daí, com apenas um clique podemos:

Marcadores

A seguir, apresentamos uma lista dos principais marcadores utilizados para formatar texto:

[link para o site da Curso-R](https://curso-r.com) é transformado em link para o site da Curso-R.

Chunks: escrevendo nosso código de R

Em um arquivo R Markdown, precisamos escrever nossos códigos dentro dos chunks. Para inserir um chunk, utilize o atalho CTRL + ALT + I.

x <- 1 + 1
x * 2
## [1] 4

Dentro dos chunks você poderá escrever códigos em R como se fosse o nosso script .R tradicional. Por padrão, o código dentro do chunk será colocado no relatório, assim como o resultado da execução desse código (i.e., tudo que seria). Veja o exemplo abaixo:

meu_vetor <- c(1, 2, 3)
meu_vetor + 1
## [1] 2 3 4

Não é apenas o resultado da última linha que é colocada no relatório. Todo resultado que seria imprimido na tela (Console) também vai para o relatório. Repare que objetos criados em um chunk ficam disponíveis para todos os chunks abaixo dele.

meu_vetor + 1
## [1] 2 3 4
meu_vetor - 1
## [1] 0 1 2
meu_vetor * 10
## [1] 10 20 30

Para alterar esses comportamentos padrões, utilizamos os parâmetros do chunk. Os parêmetros são colocados dentro das chaves, na linha que define o começo do chunk. Esse r que aparece em todos os chunks representa que o código dentro dele é um código de R.

Para impedir que o código de um chunk apareça no relatório, basta usar o parâmetro echo = FALSE. As chaves neste caso ficaria {r, echo = FALSE}. Quando fazemos isso, apenas o resultado é mostrado no relatório.

## [1] 2 3 4
## [1] 2 3 4

Também podemos impedir que um chunk seja avaliado, mostrando apenas o código no relatório, usando o argumento eval = FALSE.

meu_vetor + 1
meu_vetor + 1

Por fim, podemos rodar o chunk sem colocar nem o código nem o resultado no relatório usando o arqumento include = FALSE. Isso pode ser utilizado para carregar pacotes, definir funções ou fazer qualquer tipo de operação auxiliar que o leitor do relatório não precisa saber.

Para saber mais sobre os parâmetros dos chunks, consulte este guia (inglês).

Importanto dados

Você pode carregar pacotes e dados normalmente dentro de um script R Markdown.

library(tidyverse) 


imdb <- read_rds("../dados/imdb.rds")


getwd()
## [1] "/Users/beatrizmilz/Desktop/material_do_curso/scripts"
"../dados/imdb.rds"
## [1] "../dados/imdb.rds"
caminho_com_here <- here::here("dados", "imdb.rds")

imdb2 <- read_rds(caminho_com_here)
imdb %>% glimpse()
## Rows: 28,490
## Columns: 20
## $ id_filme             <chr> "tt0023352", "tt0037946", "tt0216204", "tt0171889…
## $ titulo               <chr> "Prestige", "Nob Hill", "The Shade", "Viewer Disc…
## $ ano                  <dbl> 1931, 1945, 1999, 1998, 1987, 1945, 1949, 1956, 2…
## $ data_lancamento      <chr> "1932-01-22", "1945-11-15", "2000-03-01", "2012-0…
## $ generos              <chr> "Adventure, Drama", "Drama, Musical", "Drama", "C…
## $ duracao              <dbl> 71, 95, 83, 105, 133, 91, 81, 98, 50, 85, 267, 11…
## $ pais                 <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", …
## $ idioma               <chr> "English", "English", "English", "English", "Engl…
## $ orcamento            <dbl> NA, NA, 400000, NA, 20000000, NA, NA, 1505000, 50…
## $ receita              <dbl> NA, NA, NA, NA, 67331309, NA, NA, NA, NA, NA, NA,…
## $ receita_eua          <dbl> NA, NA, NA, NA, 51249404, NA, NA, NA, NA, NA, NA,…
## $ nota_imdb            <dbl> 5.7, 6.3, 7.1, 3.4, 7.2, 7.1, 6.3, 7.0, 5.7, 3.1,…
## $ num_avaliacoes       <dbl> 240, 246, 102, 111, 26257, 1639, 310, 162, 115, 1…
## $ direcao              <chr> "Tay Garnett", "Henry Hathaway", "Raphaël Nadjari…
## $ roteiro              <chr> "Harry Hervey, Tay Garnett", "Wanda Tuchock, Norm…
## $ producao             <chr> "RKO Pathé Pictures", "Twentieth Century Fox", "F…
## $ elenco               <chr> "Ann Harding, Adolphe Menjou, Melvyn Douglas, Ian…
## $ descricao            <chr> "A woman travels to a French penal colony in Indo…
## $ num_criticas_publico <dbl> 12, 11, 1, 5, 142, 35, 8, 9, 4, 12, 4, 502, 6, 35…
## $ num_criticas_critica <dbl> 2, 2, 1, 3, 62, 10, 5, NA, 5, 7, 7, 161, 1, 18, 8…

Veja que as mensagens e warnings dos nossos códigos também são colocadas no relatório. Para evitar isso, basta usarmos os parâmetros message=FALSE e warning=FALSE.

Você precisa carregar o pacote apenas uma vez em cada documento. Uma vez carregado um pacote, suas funçõe estarão disponíveis para todo código em R abaixo, no mesmo ou em outros chunks.

Incluindo tabelas

A função knitr::kable() é muito útil para gerar tabelas bem formatadas.

A seguir, mostramos os 10 filmes com maior lucro na base.

imdb %>% 
  mutate(lucro = receita - orcamento) %>% 
  slice_max(lucro, n = 10) %>% 
  arrange(lucro) %>%
  mutate(
    pos = 10:1,
    lucro = scales::dollar(lucro)
  ) %>% 
  select(`Posição` = pos, Filme = titulo, Lucro = lucro) %>% 
  knitr::kable()
Posição Filme Lucro
10 Black Panther $1,147,280,838
9 Avengers: Age of Ultron $1,152,808,753
8 Jurassic World: Fallen Kingdom $1,161,958,159
7 The Avengers $1,298,814,206
6 Frozen II $1,300,026,933
5 Jurassic World $1,520,401,444
4 Avengers: Infinity War $1,727,359,754
3 Star Wars: Episode VII - The Force Awakens $1,823,224,036
2 Avengers: Endgame $2,441,800,564
1 Avatar $2,553,439,092

Incluindo gráficos

Para construir gráficos, não há segredos. O mesmo gráfico que apareceria na aba Plots do RStudio aparecerá no relatório.

imdb %>% 
  group_by(ano) %>% 
  summarise(nota_media = mean(nota_imdb, na.rm = TRUE)) %>% 
  ggplot() +
  geom_line(aes(x = ano, y = nota_media)) +
  theme_minimal()
Figura 1. Nota média ao longo dos anos.

Figura 1. Nota média ao longo dos anos.

Para centralizar o gráfico no documento, você pode usar o parâmetro fig.align = "center" no chunk. Para alterar o tamanho da figura, existem os parâmetros fig.width (comprimento) e fig.height (altura). O parâmetro fig.cap coloca legendas.