Overleaf propose une intégration avec knitr, qui vous permet d’ajouter du code R à votre document LaTeX afin de générer une sortie dynamique.Les documents contenant du code R doivent être enregistrés avec l’extension .Rtex ou .Rnw, sinon le code ne fonctionnera pas. Voyons un exemple :
\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}
Ouvrir cet exemple knitr sur OverleafComme vous pouvez le constater, le texte situé entre les caractères <<>>= et @ est du code R. Ce code et sa sortie sont affichés dans un format semblable à un listing. Ce bloc de code peut accepter des paramètres supplémentaires pour personnaliser la sortie dynamique, comme décrit dans la section suivante.
Un bloc de code comme celui présenté dans la section précédente est généralement appelé un chunk. Vous pouvez définir des options supplémentaires dans les chunks knitr. Voyez l’exemple ci-dessous :
\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 : masque le code et n’affiche que la sortie générée par R.
cache=TRUE : si le cache est activé, le chunk n’est pas réexécuté ; seuls les objets qu’il a générés sont utilisés. Cela fait gagner du temps si les données de ce chunk n’ont pas changé.
Notez que l’option cache=TRUE n’est actuellement pas prise en charge dans Overleaf, mais elle devrait fonctionner en local.
Il est possible d’accéder aux objets générés dans un chunk et de les afficher dans le texte.
\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}
Ouvrir cet exemple knitr sur OverleafLa commande \Sexpr{mean(X)} affiche le résultat renvoyé par le code R mean(X). N’importe quelle commande R peut être passée entre les accolades.
Ouvrir cet exemple knitr sur OverleafCet histogramme utilise des données stockées dans « data.txt », enregistré dans le répertoire de travail courant. Quelques options liées aux figures sont passées au chunk.plot1 : étiquette utilisée pour faire référence au graphique. Le préfixe « fig: » est obligatoire. Vous pouvez voir dans l’exemple que la figure est référencée avec \ref{fig:plot1}. fig.pos="t" : paramètre de positionnement, identique à celui utilisé dans l’environnement figure. fig.height=4, fig.width=4 : largeur et hauteur de la figure. fig.cap="First plot" : légende de la figure.
Vous pouvez importer des parties d’un script R externe dans un document knitr. C’est très utile, car il est assez courant d’écrire et de déboguer le script dans un programme externe avant de l’inclure dans votre document.Supposons que nous ayons le code R suivant dans un fichier nommé mycode.R, que nous incluons dans notre document LaTeX :
## ---- myrcode1# Create a sequence of numbers X = 2:10## ---- myrcode2# Display basic statistical measuressummary(X)
Remarquez les lignes :
## ---- myrcode1
et
## ---- myrcode2
Elles marquent le début d’un chunk de code et sont obligatoires si vous souhaitez utiliser ce script dans votre document, comme le montre le fragment de code suivant :
The chunk below will not be printed<<echo=FALSE, cache=FALSE>>=read_chunk("mycode.R")@The code must show up here<<myrcode2>>=@
Le premier chunk n’est pas affiché et sert uniquement à importer le script avec la commande read_chunk("mycode.R"). C’est pourquoi l’option echo=FALSE est définie. De plus, les scripts ne doivent pas être mis en cache. Une fois le script importé, vous pouvez afficher un chunk à l’aide de l’étiquette définie après ## ----. Dans ce cas, il s’agit de myrcode2.Nous avons regroupé tous les fragments de code de cet article dans un projet que vous pouvez ouvrir sur Overleaf.