我在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然后再次编译它:chunk b正确反应,但是孩子没有。我做了一件明显不对的事吗?
感谢您的帮助!
答案 0 :(得分:4)
我想了一下这个问题,我发现现在很难解决。问题是父文档并不真正知道子文档中的内容,dep_auto()
在设置依赖关系结构时不会考虑子文档。有两种方法可以解决这个问题。第一个是hackish:
knitr:::dep_list$set(a = c('child', 'b'))
您可能知道,:::
表示R中的“危险区域”。在knitr
中,dep_list
是控制依赖关系结构的内部对象。 dep_auto()
和dep_prev()
都依赖于此对象(类似于块选项dependson
的工作方式)。
第二种方法是将对象写入块选项,例如
<<child, whatever=x>>=
print(x)
@
阅读the knitr cache page中的第三部分了解详情。