knitr. 関数を複数のブロックに分割する

knitr. 関数を複数のブロックに分割する

knitr を使用して、R 関数を複数のブロックに分割することは可能ですか (ドキュメント作成上の理由から)? MWE は次のとおりです。

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

答え1

chunkというオプションがありeval、これはコードが実際に R によって評価されるかどうかを制御します。 に設定するとFALSEコードは評価されず、原則として何でも入力できます。

さらに、Yihuiはコメントで指摘しているを使用すると、と を<<part3, ref.label=c('part1', 'part2')>>=組み合わせて実際にコードを評価できます。part1part2

次の MWE では、パート 1 と 2 で既にコードが表示されているため、何も表示されないように、をpart3設定echoする を追加しました。その後、必要に応じて、定義した関数に実際に引数を渡す を追加できます。FALSEpart4

\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}

ここに画像の説明を入力してください

答え2

利用可能なチャンクオプションについて読むそして使い方を見る

この特定のケースでは、echo そして evalオプションは一緒に使用できます...

<<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>>=
@

答え3

ref.label オプションはこれを解決します。これが実際の例です。

\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}

関連情報