“cacheSweave不缓存副作用”是什么意思?

时间:2012-05-22 21:22:03

标签: r caching sweave chunks

我正在使用cachesweave,但我认为我不知道一切是如何工作的。我试图将代码分成模拟块和绘图块,但是一些代码很长并且在我开始使用sweave文档之前编写,所以我改为使用像

这样的东西
 <<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))
 @

1 个答案:

答案 0 :(得分:3)

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

cacheSweave包只能让你跳过计算,你必须失去所有的副作用。正如Dason评论的那样,knitr包在缓存方面更加自然 - 你在缓存块中看到的内容将在缓存的块中看到。 knitr中的副作用缓存在网站的its manualcache page中进行了解释。

BTW,knitr保持与Sweave和cacheSweave的兼容性,所以希望你不需要为转换做任何事情;只需致电library(knitr); knit('file.Rnw')

相关问题