O pacote R knitr é um motor de programação literata (o literate programming de Donald Knuth) de propósito geral, com API's leves desenhadas para dar aos usuários controle total das saídas, sem trabalho pesado de codificação. Ele combina muitas funcionalidades em um único pacote com pequenos ajustes motivados pelo meu uso diário do Sweave. Vejam a homepage do pacote para detalhes e exemplos. Vejam os FAQ's para uma lista de perguntas (incluindo sobre onde levantar questões).
Você pode instalar a versão estável em CRAN:
install.packages('knitr', dependencies = TRUE)
Você pode instalar a versão em desenvolvimento em XRAN, que fornece compilações (builds) diários do knitr:
# Atualizar todos os pacotes e depois instalar
update.packages(ask = FALSE, repos = 'https://cran.r-project.org')
install.packages('knitr', repos = c('https://xran.yihui.name', 'https://cran.r-project.org'))
Note que para compilar o pacote fonte com o R CMD build
em um ambiente sem a versão anterior do knitr, é necessário pré-instalar o knitr do CRAN ou rodar R CMD INSTALL
no repositório, de outras formas R CMD build
falhar (o que provavelmente é um bug da base do R).
Enquanto o Sweave e seus pacotes anexos como cacheSweave e pgfSweave são um motor de programação literata em R razoavelmente bom, eu freqüentemente sinto minhas mãos estão atadas, por exemplo:
- Eu encarei o código fonte do Sweave e desejei por centenas de vezes
se eu apenas pudesse inserir
[width=.8\textwidth]
entre\includegraphics
e{meu-plot.pdf}
(a maneira oficial no Sweave é\setkeys{Gin}
mas isso configura uma largura (width) global, o que não realista já que nós com freqüência temos de ajustar larguras indidualmente; Sim, você pode usar\setkeys{Gin}
por muitas vezes, mas porquê não apenas prover uma opção por pedaço (chunk) de código? - Eu desejei muitas vezes se apenas eu pudesse usar outros dispositivos
gráficos outros que não PDF e postscript; Agora o sonho se tornou real
no R oficial, mas o que eu tinha esperanças é que fosse uma opção tão
simples como
dev = 'png'
oidev = 'CairoJPEG'
; - Eu queria que múltiplos gráficos em um único pedaço de código pudesse ser registrado ao invés de apenas o último;
- Eu desejei que houvesse uma forma de arredondar os números em
\Sexpr{}
sem escrever expressões como\Sexpr{round(x, 3)}
para cada simples\Sexpr{}
; - Eu desejava que eu não tivesse de escrever
print()
em gráficos do ggplot2 e um simplesqplot(x, y)
apenas me desse um gráfico plotado no Sweave; - Eu deseje que usuários nunca precisassem de instruções sobre
Sweave.sty
ou entrasse em problemas devido ao fato que LaTeX não consegue encontrarSweave.sty
; - Eu desejei quecacheSweave pudesse imprimir os resultados de um pedaço de código mesmo que ele estivesse em cache;
- Eu desejei que brew pudesse suportar gráficos;
- Eu desejei que R2HTML pudesse suportar destaque de sintaxe (syntax highlighting) para código em R;
- ...
O pacote knitr foi desenhado para dar ao usuário acesso à todas as partes do processo de lidar com um documento de programação literata, então não há necessidade de hackear nenhum componente do núcleo se você quiser mais liberdade. Eu atravessei o código fonte do pgfSweave e do cacheSweave algumas vezes, e freqüentemente me sinto desconfortável com a quantidade de código copiada da distribuição oficial do R, especialmente quando R tem uma nova versão lançada (eu vou começar a me preocupar se os anexos - add-ons - estão atuais com o Sweave oficial).
library(knitr)
?knit
knit(input)
Se as opções não forem explicitadas, knitr vai tentar adivinhar configurações-padrão razoáveis. Alguns manuais estão disponíveis, como o manual principal, e o manual de gráficos. Para uma referência organizada, ver o livro do knitr.
Este pacote é software livre e de código aberto, licenciado sobre a GPL.