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()在设置依赖结构时也没有考虑到子文档。有两种方法可以解决这个问题。第一个是hackish:

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

您可能知道,:::在 R 中表示“危险区域”。 In knitrdep_list是控制依赖结构的内部对象。两者都dep_auto()依赖dep_prev()于这个对象(类似于块选项的dependson工作方式)。

第二种方法是将您的对象写入块选项,例如

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

阅读knitr 缓存页面中的第三部分了解详细信息。

于 2013-02-26T22:43:26.303 回答