
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 chunk
Option 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 part1
und zu kombinieren part2
und den Code tatsächlich auszuwerten.
Im folgenden MWE habe ich eine solche part3
Einstellung echo
zu 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, part4
wo 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}
Antwort2
Informieren Sie sich über die verfügbaren Chunk-OptionenUndErfahren Sie, wie Sie sie verwenden.
In diesem besonderen Fallecho
Und eval
Optionen 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}