TL;DR
Мой вопрос: Внутри сеанса R есть способ использовать knitr кешированные результаты для "быстрой перемотки" в среду (т.е. набор объектов) доступный в данном блоке кода, в том же смысле, что и сам knit()
?
Настройка:
knitr встроенная кеширование фрагментов кода является одной из его функций-убийц.
Это особенно полезно, когда некоторые куски содержат трудоемкие вычисления. Если они (или фрагмент, на которых они зависят), будут изменены, вычисления должны выполняться только при первом оформлении документа knit
ed: при всех последующих вызовах 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()
недоступен (пока?), какой лучший способ получить эквивалентный результат?