Overleaf biedt een integratie met knitr, waarmee je R-code aan je LaTeX-document kunt toevoegen om dynamische uitvoer te genereren.Documenten die R-code bevatten, moeten worden opgeslagen met de extensie .Rtex of .Rnw, anders werkt de code niet. Laten we een voorbeeld bekijken:
\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}
Open dit knitr-voorbeeld in OverleafZoals je ziet, is de tekst tussen de tekens <<>>= en @ R-code. Deze code en de uitvoer ervan worden afgedrukt in een listing-achtig formaat. Dit codeblok kan enkele extra parameters krijgen om de dynamische uitvoer aan te passen, zoals beschreven in de volgende sectie.
Een codeblok zoals dat in de vorige sectie wordt meestal een chunk genoemd. Je kunt enkele extra opties instellen in knitr-chunks. Zie het onderstaande voorbeeld:
\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=FALSEHiermee wordt de code verborgen en wordt alleen de door R gegenereerde uitvoer afgedrukt.
cache=TRUEAls cache op true staat, wordt de chunk niet uitgevoerd; alleen de objecten die erdoor zijn gegenereerd worden gebruikt. Dit bespaart tijd als de gegevens in die chunk niet zijn gewijzigd.
Let op: de optie cache=TRUE wordt momenteel niet ondersteund in Overleaf, maar zou lokaal wel moeten werken.
Het is mogelijk om objecten die in een chunk zijn gegenereerd op te vragen en inline af te drukken.
\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}
Open dit knitr-voorbeeld in OverleafHet commando \Sexpr{mean(X)} drukt de uitvoer af die wordt geretourneerd door de R-code mean(X). Tussen de accolades kan elk R-commando worden opgegeven.
Open dit knitr-voorbeeld in OverleafDit histogram gebruikt gegevens uit “data.txt”, dat in de huidige werkmap is opgeslagen. Er worden enkele figuurgerelateerde opties aan de chunk meegegeven.plot1Dit is het label waarmee naar de grafiek wordt verwezen. Het voorvoegsel “fig:” is verplicht. In het voorbeeld zie je dat naar de figuur wordt verwezen met \ref{fig:plot1}.fig.pos="t" positioneringsparameter. Dit is dezelfde als die in de figure-omgeving.fig.height=4, fig.width=4Breedte en hoogte van de figuur.fig.cap="First plot"Bijschrift van de figuur.
Je kunt delen van een extern R-script importeren in een knitr-document. Dit is erg handig, omdat het vrij gebruikelijk is om het script eerst in een extern programma te schrijven en te debuggen voordat je het in je document opneemt.Stel dat we de volgende R-code in een bestand mycode.R hebben, die we in ons LaTeX-document opnemen:
## ---- myrcode1# Create a sequence of numbers X = 2:10## ---- myrcode2# Display basic statistical measuressummary(X)
Let op de regels:
## ---- myrcode1
en
## ---- myrcode2
Deze markeren het begin van een chunk en zijn verplicht als je dit script in ons document wilt gebruiken, zoals in het volgende codefragment:
The chunk below will not be printed<<echo=FALSE, cache=FALSE>>=read_chunk("mycode.R")@The code must show up here<<myrcode2>>=@
De eerste chunk wordt niet afgedrukt en wordt alleen gebruikt om het script te importeren met het commando read_chunk("mycode.R"). Daarom is de optie echo=FALSE ingesteld. Ook mogen scripts niet worden gecachet. Zodra het script is geïmporteerd, kun je een chunk afdrukken met het label dat je na ## ---- hebt ingesteld. In dit geval is dat myrcode2.We hebben alle codefragmenten uit dit artikel in een project gezet dat je in Overleaf kunt openen .