knitr. Aufteilen einer Funktion in mehrere Blöcke

knitr. Aufteilen einer Funktion in mehrere Blöcke

Ist es mit knitr möglich, eine R-Funktion auf mehrere Blöcke aufzuteilen (aus Dokumentationsgründen)? Hier ist ein MWE:

\documentclass{article}
\begin{document}
Part1 gives salutation. 
<<part1>>=
hello <- function(x){
  print("Hi")
@
Part2 adds the name.
<<part2>>=
  print(x)}
@
\end{document}

Antwort1

Es gibt eine chunkOption namens eval, die steuert, ob der Code tatsächlich von R ausgewertet wird oder nicht. Wenn Sie sie auf setzen FALSE, wird der Code nicht ausgewertet und Sie können im Prinzip alles eingeben, was Sie möchten.

Darüber hinausYihui weist in den Kommentaren darauf hin, können Sie verwenden, <<part3, ref.label=c('part1', 'part2')>>=um Ihre part1und zu kombinieren part2und den Code tatsächlich auszuwerten.

Im folgenden MWE habe ich eine solche part3Einstellung echozu hinzugefügt FALSE, sodass nichts angezeigt wird, da der Code bereits in den Teilen 1 und 2 angezeigt wird. Wenn Sie möchten, können Sie dann ein hinzufügen, part4wo Sie der von Ihnen definierten Funktion tatsächlich ein Argument übergeben.

\documentclass{article}

\begin{document}

Part1 gives salutation. 
<<part1, eval=FALSE>>=
hello <- function(x){
  print("Hi")
@
Part2 adds the name.
<<part2, eval=FALSE>>=
  print(x)}
@

<<part3, ref.label=c('part1', 'part2'), echo=FALSE>>=
@

<<part4>>=
hello("Dan Wright")
@

\end{document}

Bildbeschreibung hier eingeben

Antwort2

Informieren Sie sich über die verfügbaren Chunk-OptionenUndErfahren Sie, wie Sie sie verwenden.

In diesem besonderen Fallecho Und evalOptionen können zusammen verwendet werden...

<<the_func, echo=FALSE>>=
hello <- function(x){
  print("Thanks")
  print(x)
}
@

<<the_func, echo=1:2, eval=FALSE>>=
@

<<the_func, echo=3:4, eval=FALSE>>=
@

Antwort3

Die Option ref.label löst dieses Problem. Hier ist das funktionierende Beispiel.

\documentclass{article}
\begin{document}
Part1 gives salutation. 
<<part1,eval=FALSE>>=
hello <- function(x){
  print("Thanks")
@
Part2 adds the name.
<<part2,eval=FALSE>>=
  print(x)}
@
<<part3,echo=FALSE,ref.label=c('part1','part2')>>=
@
<<executefunction>>=
hello('Adam and Yihue')
@
\end{document}

verwandte Informationen