7

Knitr の子ファイルに問題があります。キャッシュは正常に機能しますが、依存関係は機能しません。私のサンドボックスの例は次のようになります。

\documentclass{article}

\begin{document}

<<setup, cache=FALSE>>=
opts_chunk$set(cache=TRUE, autodep=TRUE)
dep_auto() # figure out dependencies automatically
@

<<a>>=
x <- 14
@

<<b>>=
print(x)
@

<<child, child='child.Rnw', eval=TRUE>>=
@

\end{document}

「child.Rnw」は次のようになります。

<<child>>=
print(x)
@

コードをコンパイルしたら、チャンク a の x を変更してから再度コンパイルします。チャンク b は適切に反応しますが、子は反応しません。私は明らかに間違ったことをしていますか?

助けてくれてありがとう!

4

1 に答える 1

4

この問題についてしばらく考えましたが、現時点では修正が難しいと感じています。問題は、親ドキュメントが子ドキュメントの内容を実際に認識してdep_auto()おらず、依存関係構造を設定するときに子ドキュメントを考慮に入れていないことです。この問題を解決するには2つの方法があります。最初のものはハックです:

knitr:::dep_list$set(a = c('child', 'b'))

ご存知かもしれませんが、:::Rでは「危険ゾーン」を意味しknitrます。ではdep_list、依存構造を制御する内部オブジェクトです。両方ともこのオブジェクトdep_auto()dep_prev()依存します(同様に、チャンクオプションのdependson動作方法です)。

2番目の方法は、オブジェクトをチャンクオプションに書き込むことです。

<<child, whatever=x>>=
print(x)
@

詳細については、knitrキャッシュページの3番目のセクションをお読みください。

于 2013-02-26T22:43:26.303 に答える