tl;dr
私の質問: R セッション内で、Knitrのキャッシュされた結果を使用して、特定のコード ブロックで使用可能な環境 (つまり、オブジェクトのセット) に「早送り」する方法はありknit()
ますか?
設定:
Knitrのビルトイン コード チャンクのキャッシュは、そのキラー機能の 1 つです。
一部のチャンクに時間のかかる計算が含まれている場合に特に役立ちます。それら (またはそれらが依存するチャンク) が変更されない限り、計算はドキュメントが最初にknit
編集されるときにのみ実行する必要があります: への後続のすべての呼び出しでknit
、チャンクによって作成されたオブジェクトはキャッシュからロードされるだけです。
これは最小限の例で、次のファイルです"lotsOfComps.Rnw"
。
\documentclass{article}
\begin{document}
The calculations in this chunk take a looooong time.
<<slowChunk, cache=TRUE>>=
Sys.sleep(30) ## Stands in for some time-consuming computation
x <- sample(1:10, size=2)
@
I wish I could `fast-forward' to this chunk, to view the cached value of
\texttt{x}
<<interestingChunk>>=
y <- prod(x)^2
y
@
\end{document}
編み物とTeXifyに必要な時間"lotsOfComps.Rnw"
:
## First time
system.time(knit2pdf("lotsOfComps.Rnw"))
## user system elapsed
## 0.07 0.02 31.81
## Second (and subsequent) runs
system.time(knit2pdf("lotsOfComps.Rnw"))
## user system elapsed
## 0.03 0.02 1.28
私の質問:
R セッション内で、Knitrのキャッシュされた結果を使用して、特定のコード ブロックで利用可能な環境 (つまり、オブジェクトのセット) に「早送り」する方法はありknit()
ますか?
途中ですべてのオブジェクトを再計算する必要があるためpurl("lotsOfComps.Rnw")
、コードを実行してから実行すること"lotsOfComps.R"
はできません。
理想的には、次のようなことを実行して、 の最初に存在する環境に到達することが可能です<<interestingChunk>>=
。
spin("lotsOfComps.Rnw", chunk="interestingChunk")
ls()
# [1] "x"
x
# [1] 3 8
spin()
(まだ?)利用できないので、同等の結果を得るための最良の方法は何ですか?