The source code is real
ESS Project
Pseudo-código para escrever um artigo ou relatório científico:
1. Importe uma base de dados para um *software*
2. Execute um procedimento analítico
3. Gere tabelas e figuras separadamente
4. Copie os resultados de análises
5. Coloque tudo isso em um editor de texto e escreva o documento
Mudou alguma linha na base de dados? Esqueceu de algo? Volte para o item (1) e repita o processo (e boa sorte)!
Pseudo-código para escrever um artigo ou relatório científico reprodutível:
1. Use o R Markdown e realize os 5 passos acima em um único documento
Mudou alguma linha na base de dados? Esqueceu de algo? Altere o código e gere um novo documento.
Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to humans what we want the computer to do.
Donald Knuth
O ideia básica por trás de documentos dinâmicos decorre diretamente do conceito de literate programming (“programação letrada”), um paradigma concebido por Donald Knuth em 1984.
|
|
|
Com a ascensão do R no início dos anos 2000, Friedrich Leisch criou o Sweave em 2002
utilsNo final de 2011, Yihui Xie criou o pacote knitr com a proposta de ser mais flexível, fácil e preparado para a Web
knitr = Sweave + cacheSweave + pgfSweave + weaver + animation::saveLatex + R2HTML::RweaveHTML + highlight::HighlightWeaveLatex + 0.2 brew + 0.1 SweaveListingUtils + more
Markdown is a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML).
John Gruber
A sintaxe do Markdown é muito simples, e pode ser resumida da seguinte forma:
# Título
## Sub-título
### Sub-sub-título
*Este texto aparecerá em itálico.*
Este texto aparecerá em itálico.
**Este texto aparecerá em negrito.**
Este texto aparecerá em negrito.
- Primeiro item
- Segundo item
- Terceiro item
1. Primeiro item
2. Segundo item
3. Terceiro item
Utilize 4 espaços para criar uma sub-lista:
1. Primeiro item
- Um sub-item
- Outro sub-item
2. Segundo item
3. Terceiro item
Links para endereços Web podem ser inseridos com [texto](link):
O criador do conceito de "literate programming" foi
[Donald Knuth](https://en.wikipedia.org/wiki/Donald_Knuth).
O criador do conceito de “literate programming” foi Donald Knuth.
Devemos instalar o pacote [knitr](http://yihui.name/knitr) para poder
usar o R Markdown.
Devemos instalar o pacote knitr para poder usar o R Markdown.
Para inserir uma imagem, a sintaxe é a mesma de inserir um link, mas com uma exclamação (!) na frente: .
O link para a imagem pode ser um enderço Web:

Logo do R
Ou um endereço local:

Logo do Markdown
Para criar parágrafos basta pular uma linha:
O criador do conceito de "literate programming" foi
[Donald Knuth](https://en.wikipedia.org/wiki/Donald_Knuth).
Devemos instalar o pacote [knitr](http://yihui.name/knitr) para poder
usar o R Markdown.
O criador do conceito de “literate programming” foi Donald Knuth.
Devemos instalar o pacote knitr para poder usar o R Markdown.
Para apresentar códigos na própria linha, colocamos o texto entre duas crases (`):
Para gerar números aleatórios de uma distribuição normal no R, use a
função `rnorm()`.
Para gerar números aleatórios de uma distribuição normal no R, use a função rnorm().
Para apresentar blocos de código, coloque o texto entre três crases seguidas (```) no início e no final:
```
x <- rnorm(n = 10, mean = 100, sd = 5)
hist(x, main = "")
```
x <- rnorm(n = 10, mean = 100, sd = 5)
hist(x, main = "")
Note que esse código não será interpretado, ele apenas será mostrado no texto. Esse será o papel do R aqui!
Tabelas podem ser escritas da seguinte forma:
Caracter | Permissão
---------|----------
`r` | Permissão de leitura (*read*)
`w` | Permissão de escrita (*write*)
`x` | Permissão de execução (*execute*)
`-` | Permissão desabilitada
Para gerar o seguinte resultado:
| Caracter | Permissão |
|---|---|
r |
Permissão de leitura (read) |
w |
Permissão de escrita (write) |
x |
Permissão de execução (execute) |
- |
Permissão desabilitada |
Equações matemáticas podem ser escritas em formato \(LaTeX\). A página HTML resultante irá remderizar as equações através do MathJax.
Equações na própria linha podem ser inseridas entre $:
Um modelo de regressão linear simples: $Y = \beta_0 + \beta_1 x + \epsilon$.
Um modelo de regressão linear simples: \(Y = \beta_0 + \beta_1 x + \epsilon\).
Equações podem ser exibidas entre $$:
$$
f(x;\mu,\sigma^2) = \frac{1}{\sigma\sqrt{2\pi}}
e^{ -\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2 }
$$
\[ f(x;\mu,\sigma^2) = \frac{1}{\sigma\sqrt{2\pi}} e^{ -\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2 } \]
Um documento Markdown possui a extensão .md (embora não seja a única possível).
Veja o arquivo de exemplo Exemplo1.md.
Para converter um documento Markdown em HTML é necessário um conversor.
O conversor padrão do Markdown é escrito em Perl, e pode ser integrado em diversas ferramentas, mas não é apropriado para usuários comuns.
Para testar a conversão do documento, copie e cole na página do Dingus.
O Pandoc é um conversor extremamente versátil, capaz de converter diversos formatos, incluindo Markdown para HTML.
Se o Pandoc estiver instalado no seu sistema (Linux) é possível converter o documento com
pandoc -f markdown -t html Exemplo1.md -o Exemplo1.html
O pacote knitr possui a função pandoc() que é um wrapper para executar o programa pandoc no sistema.
pandoc(input = "Exemplo1.md", format = "html")
Em ambos os casos, o resultado pode ser visualizado ao abrir o arquivo Exemplo1.html no navegador.
No exemplo anterior, escrevemos um documento em Markdown (.md) e inserimos códigos do R, que são apenas apresentados no documento final.
Agora vamos usar o knitr a nosso favor, fazedo com que ele interprete e retorne resultados dos códigos que inserimos.
Para isso renomeie a extensão do arquivo de .md para .Rmd.
Os blocos de códigos (ou chunks) agora devem conter uma marcação especial para indicar que devem ser interpretados pelo R. Para isso, colocamos {r} no início de cada bloco, que agora ficam
```{r}
x <- rnorm(n = 10, mean = 100, sd = 5)
hist(x, main = "")
```
Usando o mesmo exemplo anterior, vamos renomear o arquivo Exemplo1.md para Exemplo1-knitr.Rmd e incluir a marção {r}.
Também é possível colocar códigos do R para serem renderizados na própria linha com `r `, por exemplo, `r 2+2` gera o resultado 4 no documento.
Veja o arquivo Exemplo1-knitr.Rmd. Agora usamos o knitr, através da função knit() para compilar o documento .Rmd em um documento com sintaxe Markdown .md
knit("Exemplo1-knitr.Rmd")
|
|
O resultado da compilação pode ser vista no arquivo Exemplo1-knitr.md.
Agora temos um documento em Markdown com os códigos do R avaliados. Mas ainda precisamos processar esse arquivo para gerar o arquivo .html através do Pandoc
pandoc(input = "Exemplo1-knitr.md", format = "html")
que gera o arquivo Exemplo1-knitr.html que pode ser visualizado no navegador.
Para facilitar a conversão de arquivos .Rmd em .html, usamos o pacote rmarkdown, através da função render().
A função render() é uma wrapper que internamente chama a knitr::knit() e posteriormente converte o documento para .html usando o Pandoc.
A vantagem de usar a rmarkdown::render() é que ela possui uma série de opções que facilitam a conversão de documentos além de já renderizar páginas HTML mais amigáveis (atrvés de arquivos CSS).
Para usar esse função você precisa:
rmarkdown com install.packages("rmarkdown")No RStudio, esse pacote já vem instalado, assim como uma versão embutida do Pandoc.
Usando o exemplo anterior, vamos compilar o arquivo Exemplo1-knitr.Rmd com
## Carrega o pacote
library(rmarkdown)
render("Exemplo1-knitr.Rmd")
|
|
E o resultado pode ser visto no arquivo Exemplo1-knitr.html.
No RStudio, esse processo todo pode ser feito pelo botão Knit.
Por padrão, a função render() gera um arquivo .html mas existem outros formatos finais possíveis graças ao Pandoc.
A chamada anterior é equivalente a
render("Exemplo1-knitr.Rmd", output_format = "html_document")
O pacote rmarkdown possui uma série de formatos de saída, que possuem os sufixos _document para documentos, e _presentation para apresentações (slides). Alguns deles:
html_documentpdf_documentword_documentioslides_presentationslidy_presentationbeamer_presentationPodemos converter um documento em R Markdown para PDF com
render("Exemplo1-knitr.Rmd", output_format = "pdf_document")
O resultado é o arquivo Exemplo1-knitr.pdf. A função render() usa o Pandoc para converter Markdown para \(LaTeX\), e depois para PDF.
Um documento do Word pode ser gerado com
render("Exemplo1-knitr.Rmd", output_format = "word_document")
Para gerar Exemplo1-knitr.docx.
Apresentações em slides HTML podem ser geradas em diversos formatos, um deles é o ioslides
render("Exemplo1-knitr.Rmd", output_format = "ioslides_presentation",
output_file = "Exemplo1-knitr-ioslides.html")
Veja o resultado em Exemplo1-knitr-ioslides.html.
Apresentações em beamer
render("Exemplo1-knitr.Rmd", output_format = "beamer_presentation",
output_file = "Exemplo1-knitr-beamer.pdf")
Com resultado no arquivo Exemplo1-knitr-beamer.pdf.
Uma opção interessante ao utilizar o Pandoc é incluir metados no formato YAML.
Os metadados em YAML são escritos em formato de lista aninhada, e o Pandoc usa essas informações para incluir, por exemplo, título, autor, e data em um documento.
A opção mais importante para o rmarkdown é o campo output, que permite especificar o formato desejado de saída, o mesmo especificado no argumento output_format = da função render().
Os metadados em YAML são colocados sempre no início de um documento, e são delimitados por ---. Exemplo típico:
---
title: "Meu documento em R Markdown"
author: "Fernando Mayer"
date: 18 de setembro, 2015
output: html_document
---
Veja o arquivo Exemplo1-yaml.Rmd.
Com isso, não é mais necessário especificar o argumento output_format = na chamada da função render().
Também é possível incluir vários formatos ao mesmo tempo, por exemplo
---
title: "Meu documento em R Markdown"
author: "Fernando Mayer"
date: 18 de setembro, 2015
output:
html_document: default
pdf_document: default
---
E compilar todos eles ao mesmo tempo com
render("Exemplo1-yaml.Rmd", output_format = "all")
Veja Exemplo1-yaml.html, e Exemplo1-yaml.pdf.
Todas as opções do knitr para controlar a saída dos resultados de códigos do R são válidas para o R Markdown.
```{r, opt1=val1, opt2=val2}
# código
```knitr::opts_chunk$set():
```{r, echo=FALSE}
knitr::opts_chunk$set(opt1 = val1,
opt2 = val2
)
```As opções mais importantes são
eval = FALSE para não avaliar o código, apenas mostrarecho = FALSE para não mostrar o código, apenas as saídasresults = "hide" para não mostrar as saídasresults = "asis" para que o resultado seja tratado como texto literal em Markdown. Por exemplo, para gerar uma tabela a partir de um objeto do R, podemos usar a função knitr::kable()
```{r, results="asis"}
knitr::kable(head(iris))
```| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
|---|---|---|---|---|
| 5.1 | 3.5 | 1.4 | 0.2 | setosa |
| 4.9 | 3.0 | 1.4 | 0.2 | setosa |
| 4.7 | 3.2 | 1.3 | 0.2 | setosa |
| 4.6 | 3.1 | 1.5 | 0.2 | setosa |
| 5.0 | 3.6 | 1.4 | 0.2 | setosa |
| 5.4 | 3.9 | 1.7 | 0.4 | setosa |
| * `warning = FA | LSEemessag |
e = FALSE` para | suprimir as m | ensagens de |
| aviso | ||||
| * `fig.width = | 5andfig.he |
ight = 5` para | alterar o tama | nho dos |
| gráficos gera | dos pelo R (em | polegadas) | ||
| * `cache = TRUE | ` para armazen | ar os resultado | s |
A lista completa de opções está em http://yihui.name/knitr/options.
Para um exemplo mais completo veja o arquivo Exemplo2.Rmd.
Note que nos metadados YAML temos mais opções para cada formato de saída. Para compilar esse documento, podemos usar
render("Exemplo2.Rmd", output_format = "all")
Para gerar os arquivos Exemplo2.html e Exemplo2.pdf.
Este conteúdo está disponível por meio da Licença Creative Commons 4.0