R
Antonio Vinícius Barbosa
A ideia do Literate programming consiste em combinar inputs e outputs com o objetivo de criar documentos reproduzíveis
Alguns pacotes do R
permitem a integração de textos e códigos
sweave
: permitia que o código R fosse integrado a documentos LaTeXknitr
: variação do Markdown que permite a junção de códigosrmarkdown
: permite a construção de textos, apresentações, sites…Atualmente, o quarto
é a ferramenta mais completa para gerar documentos dinâmicos
quarto
quarto
quarto
é um sistema de publicação científica e técnica de código abertoPara instalar, fazemos:
quarto
quarto
funciona?quarto
, primeiro o knitr
executa todos os blocos de código e cria um novo documento markdown
(.md) que inclui o código e sua saída.markdown
gerado é então processado pelo pandoc
, que cria o formato finalizado.Render
encapsula essas ações e as executa na ordem certa.quarto
File > New File > Quarto Document
Ctrl+Shift+P
para criar um novo documentoUse o botão Render no RStudio IDE para renderizar o arquivo e visualizar a saída com um único clique ou atalho de teclado (Ctrl + Shift + K).
Ao renderizar, o quarto
gera um novo arquivo que contém texto, código e resultados selecionados do arquivo .qmd
. O novo arquivo pode ser um documento HTML,PDF, MS Word, apresentação, website, livro, documento interativo ou outro formato.
Existem dois tipos de editores: Source e Visual
Há três componentes principais em um documento Quarto
:
YAML
) contêm as informações básicas do documento, tais como título, autor e o tipo de output, além de outras opções. Este componente está compreendido entre três linhas (---
).Markdown
.Como exemplo, considere o seguinte código
YAML
Como vimos, os metadados são inseridos entre os três traços (---
). A sintaxe dos metadados é o YAML
(YAML Ain’t Markup Language). Nela, inserimos informações básicas do documento, tais como o título, data:
Existem várias opções de formatos. Para o formato HTML:
Para documentos com formato PDF:
Para apresentações, utilizamos:
Outras opções disponíveis podem ser vistas neste link.
Além disso, é possível definir opções dentro de um formato:
Notar que a identação (espaçamento) importa no YAML.
format: html
Do lado esquerdo temos alguns exemplos da sintaxe do Markdown e, do lado direito, o resultado gerado.
Para inserir seções e subseções no texto, fazemos através do símbolo #
Para inserir tópicos, listas ordenadas e tabelas no Markdown, utilizamos a seguinte sintaxe:
Para adicionar um link, podemos fazer:
A UFPB é a maior universidade do estado.
Ou diretamente, através de:
Website da UFPB: https://www.ufpb.br/
Um bloco de código (ou code chunks) possui a seguinte estrutura básica:
```
{r}
siginifica a linguagem que o código será executado#|
(hashpipe)Para incluir expressões executáveis, utilizamos a notação 'r '
. Por exemplo, podemos usar código embutido para indicar o número de observações em nossos dados.
A base
mtcars
possui 32 linhas e 11 colunas.
Por exemplo, as opções eval
e echo
mudam a forma de apresentação e execução:
O código gera o seguinte resultado
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Para apresentar apenas o output, fazemos:
Obtendo, como resulado:
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Ainda, é possível apresentar apenas o código, mas não executar:
Obtendo, como resulado:
include:
(true
) Inclui o resultado do código no documento.message:
(true
) Inclui mensagem do R
.warning:
(true
) Inclui avisos do R
.output:
(true
) Como e se incluir os resultados.label:
Adicionar um label para um códigocollapse
(true
) Junta código e resultado num mesmo quadro.```{r}
#| label: meu_histograma
#| eval: true
#| echo: true
#| warning: false
#| message: false
#| collapse: true
head(mtcars)
```
Como resultado, obtemos:
É possível destacar linhas (ou conjunto de linhas de um código):
Os Callout Blocks são uma excelente maneira de chamar atenção para determinados conceitos.
Existem cinco tipos diferentes de chamadas disponíveis:
note
warning
important
tip
caution
Importante
Este é um exemplo para notas!
Dica
Este é um exemplo para dicas!
Aviso
Este é um exemplo para avisos!
Importante
Este é um exemplo para algo importante!
quarto
possui uma série de ferramentas para introduzir finguras nos documentos. Para introduzir uma figura em Markdown, fazemos
Elefante
Para alterar as dimensões de uma figura, utilizamos os parâmetros width
e height
. Além disso, podemos ajustar o alinhamento através de fig-align
.
Elefante
Para inserir figuras externas, obtidas através de links, fazemos:
{width=100 fig.align="center"}
Caramelo
Para adicionar múltiplas figuras, fazemos:
quarto
Uma das formas de adicionar tabelas é através da função kable
do pacote knitr
nome | altura | massa | cor_do_cabelo | cor_da_pele |
---|---|---|---|---|
Luke Skywalker | 172 | 77 | Loiro | Branca clara |
C-3PO | 167 | 75 | NA | Ouro |
R2-D2 | 96 | 32 | NA | Branca, Azul |
Darth Vader | 202 | 136 | Nenhum | Branca |
Leia Organa | 150 | 49 | Castanho | Clara |
Para outras opções de costumização das tabelas, é recomendado o pacote kableExtra
Mais adiante veremos as funcionalidades do pacote gt
.
O quarto
suporta alguns formatos para criar apresentações:
revealjs
— reveal.js (HTML)pptx
— PowerPoint (MS Office)beamer
— Beamer (LaTeX/PDF)Enquanto o formato pptx
e beamer
geram apresentações estáticas, o formato revealjs
gera aprensetações mais flexíveis.
Em Markdown, os slides são delineados usando seções. Por exemplo, esta é uma apresentação simples com dois slides (cada um definido com um título de nível 2 (##):
Para dividir os slides por seções, podemos introduzir títulos de nível 1 (#)
Por default, os bullets em um slide são apresentados de única vez. Podemos, no entanto, utilizar listas incrementais, conforme o exemplo a seguir:
É possível definir as listas incrementais de maneira global. Isto tornará default durante toda a apresentação:
Para adicionar pausas dentro de um slide, inserimos três pontos (. . .
) separados por espaços:
Para inserir colunas lado a lado, você pode usar a classe .columns
, contendo dois ou mais elementos .columns
e o atributo width
, conforme o exemplo a seguir:
Para adicionar guias (ou tabset panel), utilizamos a classe .panel-tabset
. Note que é importante incluir seções (##) para cada guia. Considere o exemplo abaixo
Para obter as guias, fazemos:
Para os diferentes tipos de transições de slides, temos
none
: sem transição (instantâneo)fade
: cross fadeslide
: Slide horizontalconvex
: slide convexoconcave
: slide côncavozoom
: do centro para fora da telaPara adicionar o número do slide, fazemos
Onde c/t
significa slide corrente/total de slides. Outras opões são c
, h.v
, h/v
.
Para adicionar um texto de rodapé numa apresentação:
YAML
:
code chunk
e no lado direito apenas o resultado da execução.code chunk
e na segunda guia apenas o resultado da execução.15:00
Para gerar arquivos PDF, é necessário instalar uma distribuição TeX. No terminal, fazer:
Uma vez instalado, ajustamos o formato do documento:
documentclass
: classe do documento, como article, report ou bookclassoption
: estrutura onecolumn/twocolumn, portrait/landscapelof
-lot
: lista de figuras e tabelasgeometry
: recuo das margensfontfamily
: usar fontes do sistema. Ver lista completa em systemfonts::system_fonts()
colorlinks
: destacar links do textoQuarto Pub
Quarto Pub
é um serviço gratuito de publicação de conteúdo criado com o Quarto. É ideal para blogs, sites de cursos ou projetos, livros e apresentações.
O primeiro passo consiste em criar uma conta gratuita no Quarto Pub.
Quarto Pub
Para publicar um conteúdo, é necessário criar um projeto no RStudio
. Em seguida, digitar no Terminal
Após isso, é necessário adicionar o login e senha cadastrados.
Para aprender mais, ver galeria com exemplos e códigos (link).