pan*_*fel 6 latex caching children r knitr
我在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}
Run Code Online (Sandbox Code Playgroud)
随着'child.Rnw'看起来像这样:
<<child>>=
print(x)
@
Run Code Online (Sandbox Code Playgroud)
当我现在编译代码,然后在块a中更改x然后再次编译它:chunk b正确反应,但是孩子没有.我做错了什么吗?
谢谢您的帮助!
这个问题我想了一会儿,目前觉得很难解决。问题在于父文档并不真正知道子文档中的内容,并且dep_auto()在设置依赖关系结构时没有考虑子文档。有两种方法可以解决这个问题。第一个是黑客的:
knitr:::dep_list$set(a = c('child', 'b'))
Run Code Online (Sandbox Code Playgroud)
您可能知道,:::在 R 中表示“危险区域”。 In 中knitr,dep_list是控制依赖结构的内部对象。和dep_auto()都dep_prev()依赖于这个对象(类似地,这就是 chunk 选项的方式dependson工作原理)。
第二种方法是将对象写入块选项,例如
<<child, whatever=x>>=
print(x)
@
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请阅读knitr 缓存页面中的第三部分。