Overleaf offre un’integrazione con knitr, che ti permette di aggiungere codice R al tuo documento LaTeX per generare un output dinamico.I documenti che contengono codice R devono essere salvati con l’estensione .Rtex o .Rnw, altrimenti il codice non funzionerà. Vediamo un esempio:
\documentclass{article}\begin{document}You can type R commands in your \LaTeX{} document which will be processed and their output included in the document:<<>>=# Create a sequence of numbersX = 2:10# Display basic statistical measuressummary(X)@\end{document}
Apri questo esempio knitr su OverleafCome puoi vedere, il testo compreso tra i caratteri <<>>= e @ è codice R. Questo codice e il suo output vengono stampati in un formato simile a un listato. Questo blocco di codice può accettare alcuni parametri aggiuntivi per personalizzare l’output dinamico, come descritto nella sezione successiva.
Un blocco di codice come quello presentato nella sezione precedente viene di solito chiamato chunk. Nei chunk di knitr puoi impostare alcune opzioni aggiuntive. Guarda l’esempio seguente:
\documentclass{article}\begin{document}You can type R commands in your \LaTeX{} document which will be processed and their output included in the document:<<echo=FALSE, cache=TRUE>>=# Create a sequence of numbersX = 2:10# Display basic statistical measuressummary(X)@\end{document}
echo=FALSE nasconde il codice e stampa solo l’output generato da R.
cache=TRUE se cache è impostato a true, il chunk non viene eseguito, vengono usati solo gli oggetti da esso generati. Questo fa risparmiare tempo se i dati di quel chunk non sono cambiati.
Nota che l’opzione cache=TRUE al momento non è supportata in Overleaf, ma dovrebbe funzionare in locale.
È possibile accedere agli oggetti generati in un chunk e stamparli all’interno del testo.
\documentclass{article}\begin{document}You can type R commands in your \LaTeX{} document which will be processed and their output included in the document:<<echo=FALSE, cache=TRUE>>=# Create a sequence of numbersX = 2:10# Display basic statistical measuressummary(X)@So, the mean of the data is $\Sexpr{mean(X)}$\end{document}
Apri questo esempio knitr su OverleafIl comando \Sexpr{mean(X)} stampa l’output restituito dal codice R mean(X). All’interno delle parentesi graffe si può passare qualsiasi comando R.
Apri questo esempio knitr su OverleafQuesto istogramma usa i dati memorizzati in “data.txt”, salvato nella directory di lavoro corrente. Al chunk vengono passate alcune opzioni relative alla figura.plot1 è l’etichetta usata per fare riferimento al grafico. Il prefisso “fig:” è obbligatorio. Nell’esempio puoi vedere che si fa riferimento alla figura con \ref{fig:plot1}. fig.pos="t" è il parametro di posizionamento, lo stesso usato nell’ambiente figure. fig.height=4, fig.width=4 sono la larghezza e l’altezza della figura. fig.cap="First plot" è la didascalia della figura.
Puoi importare parti di uno script R esterno in un documento knitr. Questo è molto utile, poiché è abbastanza comune scrivere ed eseguire il debug dello script in un programma esterno prima di includerlo nel documento.Supponiamo di avere il seguente codice R in un file chiamato mycode.R, che includiamo nel nostro documento LaTeX:
## ---- myrcode1# Create a sequence of numbers X = 2:10## ---- myrcode2# Display basic statistical measuressummary(X)
Nota le righe:
## ---- myrcode1
e
## ---- myrcode2
Queste righe indicano l’inizio di un chunk di codice e sono obbligatorie se vuoi usare questo script nel documento, come mostrato nel seguente frammento di codice:
The chunk below will not be printed<<echo=FALSE, cache=FALSE>>=read_chunk("mycode.R")@The code must show up here<<myrcode2>>=@
Il primo chunk non viene stampato e serve solo a importare lo script con il comando read_chunk("mycode.R"). Per questo è impostata l’opzione echo=FALSE. Inoltre, gli script non devono essere memorizzati nella cache. Una volta importato lo script, puoi stampare un chunk usando l’etichetta impostata dopo ## ----. In questo caso è myrcode2.Abbiamo raccolto tutti i frammenti di codice dell’articolo in un progetto che puoi aprire su Overleaf.