2012-05-22 27 views
0

我正在使用cachesweave,但我不认为我知道所有东西都是如何工作的。我试图分开代码成模拟块和绘制块,但有些代码很长,之前,我开始了sweave文件写的,所以我改用类似“cacheSweave不缓存副作用”是什么意思?

<<foo,cache=TRUE>> 
source("mainScript.R") 
@ 
<<plot,fig=TRUE>> 
a<- print(str(F1)) 
plot(F1) 
@ 

的东西是mainScript .R是包含绘图函数等等的有些复杂的模拟代码。我读过cacheSweave小插曲“cacheSweave不缓存副作用”并且图不会缓存,所以我想知道mainScript.R中的绘图函数是否会影响表达式的评估方式?

这可能是一个明显的问题。假设我在上面两个之后有另一个块。 “foo”和“plot”中表达式的所有结果都可以用在这个新的块中,对吗?例如,

<<post-chunk>> 
print(a) 
print(str(F1)) 
@ 
+0

正如旁白 - 你可能想看看knitr。它基本上是Sweave的一个更好的版本,它自动内置缓存并执行缓存图。 – Dason

+0

看看这个答案:http://stackoverflow.com/questions/9538367/sweave-cache-packages/9561953#9561953 – jthetzel

回答

3

一个完整的说明,请参见Wikipedia。 R中的一些常见副作用包括:print()对象,绘图,写入文件和加载包。

cacheSweave包只可跳过计算,你要失去所有的副作用。正如Dason评论的那样,knitr包在缓存方面更加自然 - 在缓存块中可以看到未缓存块中看到的内容。副作用在knitr缓存在its manual说明,并在网站上cache page

BTW,knitr保持兼容Sweave和cacheSweave,所以希望你不需要做过渡东西;只需拨打library(knitr); knit('file.Rnw')

+0

谢谢。我正在尝试编织,但我是新来的,并且在我完全理解编织和缓存工作之前不想深入研究另一种工具。所以发生了什么是一旦一个块被缓存,所有加载的包都将不可用,并且绘制并绘制图形,并在下一次编织文档时不会输出。 –