Relação entre R Markdown, Knitr, Pandoc e Bookdown

93

Qual é a relação entre a funcionalidade de R Markdown, Knitr, Pandoc e Bookdown?

Especificamente, qual é a 'divisão de trabalho' entre esses pacotes na conversão de documentos de marcação com código R embutido (por exemplo, .Rnwou .Rmd) em saídas finais (por exemplo, .pdfou .html)? E se o Knitr for usado para processar o RMarkdown, o que o rmarkdownpacote faz e como ele é diferente do markdown package?

RobinL
fonte

Respostas:

142

Pandoc

Pandoc é um conversor de documentos. Ele pode converter de uma série de formatos de marcação diferentes para muitos outros formatos, como .doc, .pdfetc.

Pandoc é uma ferramenta de linha de comando sem GUI. É um software independente, separado do R. No entanto, ele vem com o R Studio porque rmarkdowndepende dele para a conversão de documentos.

O Pandoc não apenas converte documentos, mas também adiciona funcionalidade à linguagem de marcação de base para permitir que suporte saídas mais complexas.

R Markdown

R Markdown é baseado em markdown:

Markdown (linguagem de marcação)

Markdown é uma linguagem de marcação leve com sintaxe de formatação de texto simples projetada para que possa ser convertida para HTML e muitos outros formatos. Um arquivo markdown é um arquivo de texto simples que normalmente recebe a extensão .md.

Como outras linguagens de marcação, como HTML e Latex, é completamente independente de R.

Não existe um padrão Markdown claramente definido. Isso levou à fragmentação, pois diferentes fornecedores escrevem suas próprias variantes da linguagem para corrigir falhas ou adicionar recursos ausentes.

Markdown (pacote R)

markdowné um pacote R que converte .Rmdarquivos em HTML. É o antecessor do rmarkdown, que oferece muito mais funcionalidade. Não é mais recomendado para uso.

R Markdown (linguagem de marcação)

R Markdown é uma extensão da sintaxe de markdown. Arquivos R Markdown são arquivos de texto simples que normalmente têm a extensão de arquivo.Rmd . Eles são escritos usando uma extensão da sintaxe de markdown que permite que o código R seja embutido neles de uma forma que pode ser executada posteriormente.

Como se espera que sejam processados ​​pelo rmarkdownpacote, é possível usar a sintaxe de markdown do Pandoc como parte de um arquivo de markdown R. Esta é uma extensão da sintaxe de redução original que fornece funcionalidade adicional como HTML / Latex bruto e tabelas.

R Markdown (pacote)

O pacote R rmarkdowné uma biblioteca que processa e converte.Rmd arquivos em vários formatos diferentes.

A função do núcleo é rmarkdown::renderque está sobre os ombros de pandoc . Esta função 'renderiza o arquivo de entrada para o formato de saída especificado usando pandoc. Se a entrada requer tricô, knitr::knité chamado antes do pandoc.

O objetivo do pacote RMarkdown é simplesmente fornecer padrões razoavelmente bons e uma interface amigável para R para personalizar as opções do Pandoc. .

Os metadados YAML vistos na parte superior dos arquivos RMarkdown são especificamente para passar opções rmarkdown::renderpara orientar o processo de construção.

Observe que o RMarkdown lida apenas com a sintaxe de markdown. Se você deseja converter um .Rhtmlou um .Rnwarquivo, você deve usar as funções de conveniência incorporadas Knitr, como knitr::knit2htmleknitr:knit2pdf

Knitr

Knitr pega um documento de texto simples com código embutido, executa o código e 'junta' os resultados de volta ao documento.

Por exemplo, ele converte

A função principal é knitr::knite, por padrão, vai olhar para o documento de entrada e tentar adivinhar de que tipo é - Rnw, Rmd etc.

Esta função central desempenha três funções: - Um analisador de origem, que examina o documento de entrada e detecta quais partes são códigos que o usuário deseja que sejam avaliadas. - Um avaliador de código, que avalia este código - Um renderizador de saída, que grava os resultados da avaliação de volta no documento em um formato que pode ser interpretado pelo tipo de saída bruto. Por exemplo, se o arquivo de entrada for um .Rmd, a renderização de saída marca a saída da avaliação de código em.md formato.

Converter entre formatos de documento

O Knitr não converte entre formatos de documento - como converter um .mdem um .html. No entanto, ele fornece algumas funções convenientes para ajudá-lo a usar outras bibliotecas para fazer isso. Se você estiver usando o rmarkdownpacote, deve ignorar essa funcionalidade porque ela foi substituída por rmarkdown::render.

Um exemplo é o knitr:knit2pdfque irá: 'Tricotar o documento Rnw ou Rrst de entrada e compilar em PDF usando texi2pdf ou rst2pdf'.

Uma fonte potencial de confusão é knitr::knit2html, que "é uma função de conveniência para combinar a fonte de markdown de entrada e chamar markdown::markdownToHTMLpara converter o resultado em HTML". Esta agora é uma funcionalidade legada porque o markdownpacote foi substituído pelo rmarkdownpacote. Veja esta nota .

Bookdown

O pacote bookdown é construído em cima do R Markdown e herda a simplicidade da sintaxe do Markdown, bem como a possibilidade de vários tipos de formatos de saída (PDF / HTML / Word /…).

Ele oferece recursos como saída HTML de várias páginas, numeração e referência cruzada de figuras / tabelas / seções / equações, inserção de partes / apêndices e importou o estilo GitBook ( https://www.gitbook.com ) para criar HTML elegante e atraente páginas do livro.

RobinL
fonte
2
Achei isso muito confuso, então fiz o meu melhor aqui. Edite ou adicione uma resposta diferente se eu tiver algo errado ...
RobinL
6
um aspecto que acho confuso é a documentação dos parâmetros que estão sendo passados ​​para cada etapa da cadeia de ferramentas. Quase não há ajuda interativa (como preenchimento automático) e é preciso adivinhar quais parâmetros devem ser chamados nos cabeçalhos yaml, ou via knitr_opts(eu sempre esqueço como é chamado), ou via argumentos pandoc personalizados, ou via arquivos yam adicionais, ou um arquivo personalizado pandoc template ... Às vezes parece um pouco selvagem, especialmente quando você adiciona LaTeX à cadeia.
baptiste
3
@baptiste eu concordo totalmente. E é exatamente por isso que prefiro documentos RNW com LaTeX nua. Nenhuma pandocetapa intermediária , menos mágica, menos confusão. Apenas a curva de aprendizado do LaTeX reconhecidamente íngreme. Na minha opinião, o Rmarkdown é ótimo quando você está satisfeito com as coisas padrão simples. Mas assim que você precisa ajustá-lo, a complexidade aumenta rapidamente.
CL.
3
Esta é a melhor explicação que encontrei de tudo isso. É muito confuso para iniciantes ou mesmo para aqueles com anos de experiência em R e látex separadamente como eu. Excelente postagem.
StatsStudent
2
@StatsStudent Acho que uma versão anterior da folha de referências do rstudio rmarkdown tinha um diagrama que foi muito útil para entender as diferentes etapas na criação de saída a partir do rmarkdown. Talvez uma resposta aqui pudesse ser feita com um diagrama?
Mark Neal