【问题标题】:what does it mean that "cacheSweave doesn't cache side-effects"?“cacheSweave 不缓存副作用”是什么意思?
【发布时间】:2012-05-22 21:22:03
【问题描述】:

我正在使用 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))
 @

【问题讨论】:

标签: r caching sweave chunks


【解决方案1】:

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

cacheSweave 包只允许您跳过计算,并且您必须失去所有副作用。正如 Dason 评论的那样,knitr 包在缓存方面更加自然——您在未缓存块中看到的内容将在缓存块中看到。 knitr 中副作用的缓存在网站中的its manualcache page 中进行了说明。

顺便说一句,knitr 保持与 Sweave 和 cacheSweave 的兼容性,所以希望您不需要为过渡做任何事情;只需致电library(knitr); knit('file.Rnw')

【讨论】:

  • 谢谢。我正在尝试 knitr,但我是 sweave 的新手,并且在我完全理解编织和缓存的工作原理之前不想深入研究另一个工具。所以发生的事情是,一旦一个块被缓存,所有加载的包都将不可用,并且绘制和打印输出的图,将不会在下次编织文档时输出。
猜你喜欢
  • 2023-03-12
  • 2012-09-18
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 2014-05-10
  • 2012-08-21
  • 2014-06-11
相关资源
最近更新 更多