> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/overleaf-learn-latex-pt/mais-topicos/29-knitr.md).

# Knitr

Como observado na Wikipedia, [O knitr é um motor para geração dinâmica de relatórios com R](https://en.wikipedia.org/wiki/Knitr), uma linguagem de programação orientada para estatística. Este artigo explica como adicionar código R ao seu documento LaTeX para gerar uma saída dinâmica.

Numa distribuição padrão do LaTeX, é necessário ter o R configurado no seu sistema operativo e executar alguns comandos especiais para o compilar. O Overleaf pode poupar-lhe o trabalho, **knitr** funciona logo de início.

## Introdução

Os documentos que contêm código R devem ser guardados com a extensão `.Rtex` ou `.Rnw`, caso contrário o código não funcionará. Vejamos um exemplo:

```latex
\documentclass{article}
\begin{document}

Pode digitar comandos R no seu documento \LaTeX{} que serão processados e cujo resultado será incluído no documento:

<<>>=
# Criar uma sequência de números
X = 2:10

# Apresentar medidas estatísticas básicas
summary(X)

@
\end{document}
```

![KnitrDemo1.png](/files/48c57296bf94744f0ec8adfcbba36d1f92fca03a)

&#x20;[Abra este `knitr` exemplo no Overleaf](https://www.overleaf.com/project/new/template/20421?id=69881107\&templateName=Knitr+demo+1\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Como vê, o texto entre os caracteres `<<>>=` e `@` é código R, este código e a sua saída são impressos num formato semelhante a listagem. Este bloco de código pode receber alguns parâmetros extra para personalizar a saída dinâmica. Veja a próxima secção.

## Blocos de código

Um bloco de código como o apresentado na secção anterior é normalmente chamado de *chunk*. Pode definir algumas opções extra nos chunks do knitr. Veja o exemplo abaixo:

```latex
\documentclass{article}
\begin{document}

Pode digitar comandos R no seu documento \LaTeX{} que serão processados e cujo resultado será incluído no documento:

<<echo=FALSE, cache=TRUE>>=
# Criar uma sequência de números
X = 2:10

# Apresentar medidas estatísticas básicas
summary(X)

@
\end{document}
```

![KnitrDemo2.png](/files/2daa3f249d0c6fcd05ab6c77bf18b125f50dced3)

&#x20;[Abra este `knitr` exemplo no Overleaf](https://www.overleaf.com/project/new/template/20423?id=69885763\&templateName=Knitr+demo+2\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Há três opções adicionais passadas dentro de `<<` e `>>`.

**echo=FALSE**

Isto oculta o código e imprime apenas a saída gerada pelo R.

**cache=TRUE**

Se cache estiver definido como true, o chunk não é executado, apenas os objetos gerados por ele. Isto poupa tempo se os dados nesse chunk não tiverem mudado. Note que a opção cache=TRUE não é atualmente suportada no Overleaf, mas deve funcionar localmente.

Veja o [guia de referência](#reference-guide) para mais opções.

## Comandos em linha

É possível aceder aos objetos gerados num chunk e imprimi-los em linha.

```latex
\documentclass{article}
\begin{document}

Pode digitar comandos R no seu documento \LaTeX{} que serão processados e cujo resultado será incluído no documento:

<<echo=FALSE, cache=TRUE>>=
# Criar uma sequência de números
X = 2:10

# Apresentar medidas estatísticas básicas
summary(X)

@

Assim, a média dos dados é $\Sexpr{mean(X)}$
\end{document}
```

![KnitrDemo3.png](/files/b9a231aece3403cf8d0993cf919de467b4bc8bc7)

&#x20;[Abra este `knitr` exemplo no Overleaf](https://www.overleaf.com/project/new/template/20425?id=69886866\&templateName=Knitr+demo+3\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

O comando `\Sexpr{mean(X)}` imprime a saída devolvida pelo código R `mean(X)`. Dentro das chavetas pode ser passado qualquer comando R.

## Gráficos

Também podem ser adicionados gráficos a um **knitr** documento. Veja o próximo exemplo

```latex
\documentclass{article}
\begin{document}

<<plot1, fig.pos="t", fig.height=4, fig.width=4, fig.cap="First plot">>=

xdata = read.csv(file="data.txt", head=TRUE,sep=" ")

hist(xdata$data, main="Overleaf histogram", xlab="Data")

@

A figura \ref{fig:plot1} é um histograma simples.

\end{document}
```

![KnitrDemo4.png](/files/81e93b73506eef2694c2bbc1ed2329d2b9d1e8ef)

&#x20;[Abra este `knitr` exemplo no Overleaf](https://www.overleaf.com/project/new/template/20427?id=69890965\&templateName=Knitr+demo+3\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Este histograma usa dados armazenados em "data.txt", guardado no diretório de trabalho atual. Algumas opções relacionadas com a figura são passadas ao chunk.

**plot1**

Esta é a etiqueta usada para referenciar o gráfico. O prefixo "fig:" é obrigatório. Pode ver no exemplo que a figura é referenciada com \ref{fig:plot1}.

**fig.pos="t"**

Parâmetro de posicionamento. É o mesmo usado no ambiente figure.

**fig.height=4, fig.width=4**

Largura e altura da figura.

**fig.cap="First plot"**

Legenda da figura.

## Scripts R externos

Pode importar partes de um script R externo para um **knitr** documento. Isto é muito útil, uma vez que é bastante comum escrever e depurar o script num programa externo antes de o incluir no seu documento.

Suponhamos que temos o seguinte código R num ficheiro chamado `mycode.R` que incluímos no nosso documento LaTeX:

```latex
## ---- myrcode1
# Criar uma sequência de números
 X = 2:10

## ---- myrcode2
# Apresentar medidas estatísticas básicas
summary(X)
```

Repare nas linhas

```latex
## ---- myrcode1
```

e

```latex
## ---- myrcode2
```

Estas assinalam o início de um bloco de código e são obrigatórias se quiser usar este script no nosso documento, como mostrado no seguinte fragmento de código:

```latex
O chunk abaixo não será impresso

<<echo=FALSE, cache=FALSE>>=
read_chunk("mycode.R")
@

O código deve aparecer aqui

<<myrcode2>>=

@
```

![KnitrDemo5.png](/files/6fb9bb09800c76b86d24a1fefdcd1a7dfd54a218)

O primeiro chunk não é impresso, é apenas usado para importar o script com o comando `read_chunk("mycode.R")`, é por isso que a opção `echo=FALSE` está definida. Além disso, os scripts não devem ser colocados em cache. Assim que o script é importado, pode imprimir um chunk usando a etiqueta que definiu após `## ----`. Neste caso é `myrcode2`.

Colocámos todos os fragmentos de código do artigo num projeto que  [pode Abrir no Overleaf](https://www.overleaf.com/project/new/template/20429?id=69894649\&templateName=Knitr+full+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) .

## Guia de referência

**Algumas opções de chunk**

* `resultados`. Altera o comportamento dos resultados gerados pelo código R, os valores possíveis são
  * `markup` Use LaTeX para formatar a saída.
  * `asis` Imprime os resultados brutos do R.
  * `hold` Mantém os resultados da saída e coloca-os no fim do chunk.
  * `hide` Ocultar resultados.
* `echo`. Se deve incluir o código-fonte R. Pode aceitar outros parâmetros, `echo=2:3` imprime apenas as segunda e terceira linhas; `echo=-2:-3` exclui apenas as segunda e terceira linhas.
* `cache`. Se deve colocar em cache o bloco de código. Os valores possíveis são `TRUE` e `FALSE`
* `highlight`. Se deve realçar o código-fonte. Os valores possíveis são `TRUE` e `FALSE`
* `background`. Cor de fundo do bloco, podem ser usados os formatos rgb e HTML, o valor predefinido é *"#F7F7F7"*.

## Leitura adicional

Para mais informações, veja

* [Realce de código com minted](/latex/overleaf-learn-latex-pt/formatacao/12-code-highlighting-with-minted.md)
* [Utilizar cores no LaTeX](/latex/overleaf-learn-latex-pt/formatacao/13-using-colors-in-latex.md)
* [gráficos em LaTeX](/latex/overleaf-learn-latex-pt/especifico-da-area/08-pgfplots-package.md)
* [Inserção de imagens](/latex/overleaf-learn-latex-pt/mais-topicos/27-inserting-images.md)
* [Tabelas](/latex/overleaf-learn-latex-pt/figuras-e-tabelas/01-tables.md)
* [Posicionamento de imagens e tabelas](/latex/overleaf-learn-latex-pt/figuras-e-tabelas/02-positioning-images-and-tables.md)
* [Pacote TikZ](/latex/overleaf-learn-latex-pt/figuras-e-tabelas/05-tikz-package.md)
* [Expressões matemáticas](/latex/overleaf-learn-latex-pt/matematica/01-mathematical-expressions.md)
* [o **knitr** página web](http://yihui.name/knitr/)
* [o **knitr** manual do pacote](https://bitbucket.org/stat/knitr/downloads/knitr-manual.pdf)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/overleaf-learn-latex-pt/mais-topicos/29-knitr.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
