Relazione tra R Markdown, Knitr, Pandoc e Bookdown


93

Qual è la relazione tra le funzionalità di R Markdown, Knitr, Pandoc e Bookdown?

In particolare, qual è la "divisione del lavoro" tra questi pacchetti nella conversione di documenti di markup con codice R incorporato (ad esempio .Rnwor .Rmd) in output finali (ad esempio .pdfor .html)? E se Knitr viene utilizzato per elaborare RMarkdown, cosa fa il rmarkdownpacchetto e in che modo è diverso da markdown package?

Risposte:


142

Pandoc

Pandoc è un convertitore di documenti. Può convertire da un numero di formati di markup diversi a molti altri formati, come .doc, .pdfecc.

Pandoc è uno strumento da riga di comando senza GUI. È un software indipendente, separato da R. Tuttavia, viene fornito in bundle con R Studio perché rmarkdownsi basa su di esso per la conversione dei documenti.

Pandoc non solo converte i documenti, ma aggiunge anche funzionalità al linguaggio di markdown di base per consentirgli di supportare output più complessi.

R Markdown

R Markdown si basa sul markdown:

Markdown (linguaggio di markup)

Markdown è un linguaggio di markup leggero con sintassi di formattazione del testo semplice progettato in modo che possa essere convertito in HTML e molti altri formati. Un file markdown è un file di testo normale a cui in genere viene assegnata l'estensione .md.

Come altri linguaggi di markup come HTML e Latex, è completamente indipendente da R.

Non esiste uno standard Markdown chiaramente definito. Ciò ha portato alla frammentazione poiché diversi fornitori scrivono le proprie varianti del linguaggio per correggere i difetti o aggiungere funzionalità mancanti.

Markdown (pacchetto R)

markdownè un pacchetto R che converte i .Rmdfile in HTML. È il predecessore di rmarkdown, che offre molte più funzionalità. Non è più consigliato per l'uso.

R Markdown (linguaggio di markup)

R Markdown è un'estensione della sintassi del markdown. I file R Markdown sono file di testo normale che in genere hanno l'estensione file .Rmd. Sono scritti utilizzando un'estensione della sintassi markdown che consente di incorporare il codice R in un modo che può essere eseguito successivamente.

Poiché si prevede che vengano elaborati dal rmarkdownpacchetto, è possibile utilizzare la sintassi markdown Pandoc come parte di un file markdown R. Questa è un'estensione della sintassi originale del markdown che fornisce funzionalità aggiuntive come HTML / Latex non elaborato e tabelle.

R Markdown (pacchetto)

Il pacchetto R rmarkdownè una libreria che elabora e converte i .Rmdfile in un numero di formati diversi.

La funzione principale è rmarkdown::renderche si trova sulle spalle di Pandoc . Questa funzione esegue il rendering del file di input nel formato di output specificato utilizzando pandoc. Se l'input richiede il lavoro a maglia, knitr::knitviene chiamato prima di pandoc.

Lo scopo del pacchetto RMarkdown è semplicemente quello di fornire impostazioni predefinite ragionevolmente buone e un'interfaccia R-friendly per personalizzare le opzioni Pandoc. .

I metadati YAML visualizzati nella parte superiore dei file RMarkdown servono specificamente per passare le opzioni rmarkdown::render, per guidare il processo di compilazione.

Nota che RMarkdown si occupa solo della sintassi del markdown. Se vuoi convertire un file .Rhtmlo .Rnw, dovresti usare le comode funzioni integrate in Knitr, come knitr::knit2htmleknitr:knit2pdf

Knitr

Knitr prende un documento di testo semplice con codice incorporato, esegue il codice e "unisce" i risultati nel documento.

Ad esempio, converte

La funzione principale è knitr::knite per impostazione predefinita questo esaminerà il documento di input e proverà a indovinare di che tipo è: Rnw, Rmd ecc.

Questa funzione principale svolge tre ruoli: - Un parser sorgente, che esamina il documento di input e rileva quali parti sono codice che l'utente desidera essere valutato. - Un analizzatore di codice, che valuta questo codice - Un renderizzatore di output, che riscrive i risultati della valutazione nel documento in un formato che è interpretabile dal tipo di output grezzo. Ad esempio, se il file di input è un .Rmd, il rendering dell'output contrassegna l'output della valutazione del codice in .mdformato.

Conversione tra formati di documenti

Knitr non converte tra i formati di documento, come la conversione di un file .mdin un file .html. Tuttavia, fornisce alcune funzioni utili per aiutarti a utilizzare altre librerie per farlo. Se stai usando il rmarkdownpacchetto, dovresti ignorare questa funzionalità perché è stata sostituita da rmarkdown::render.

Un esempio è knitr:knit2pdfche: 'Knit il documento di input Rnw o Rrst e compilare in PDF usando texi2pdf o rst2pdf'.

Una potenziale fonte di confusione è knitr::knit2html, che "è una comoda funzione per collegare la sorgente di markdown di input e chiamare markdown::markdownToHTMLper convertire il risultato in HTML". Questa è ora una funzionalità legacy perché il markdownpacchetto è stato sostituito dal rmarkdownpacchetto. Vedi questa nota .

Bookdown

Il pacchetto bookdown si basa su R Markdown ed eredita la semplicità della sintassi Markdown, così come la possibilità di più tipi di formati di output (PDF / HTML / Word /…).

Offre funzionalità come output HTML multipagina, numerazione e riferimenti incrociati di figure / tabelle / sezioni / equazioni, inserimento di parti / appendici e importato lo stile GitBook ( https://www.gitbook.com ) per creare HTML elegante e accattivante pagine del libro.


2
L'ho trovato molto confuso, quindi ho fatto del mio meglio qui. Per favore, modifica o aggiungi una risposta diversa se ho qualcosa di sbagliato ...
RobinL

6
un aspetto che trovo confuso è la documentazione dei parametri passati a ogni passaggio della toolchain. Non c'è quasi nessun aiuto interattivo (come il completamento automatico) e si deve indovinare quali parametri dovrebbero essere chiamati nelle intestazioni yaml, o tramite knitr_opts(dimentico sempre come si chiama), o tramite argomenti pandoc personalizzati, o tramite file yam aggiuntivi, o un custom pandoc template ... A volte sembra un po 'una giungla, specialmente quando aggiungi LaTeX alla catena.
baptiste

3
@baptiste sono completamente d'accordo. E questo è esattamente il motivo per cui preferisco i documenti RNW con LaTeX nudo. Nessun pandocpassaggio intermedio , meno magia, meno confusione. Solo la curva di apprendimento LaTeX, certamente ripida. Secondo me, Rmarkdown è ottimo quando sei soddisfatto delle semplici cose predefinite. Ma non appena devi modificarlo, la complessità aumenta rapidamente.
CL.

3
Questa è la migliore spiegazione che ho trovato di tutto questo. È molto confuso per i principianti o anche per quelli con anni di esperienza in R e latex separatamente come me. Post eccellente.
StatsStudent

2
@StatsStudent Penso che una versione precedente del cheat sheet di rstudio rmarkdown avesse un diagramma che era molto utile per comprendere i diversi passaggi nella creazione dell'output da rmarkdown. Forse una risposta qui potrebbe fare con un diagramma?
Mark Neal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.