首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sweave Cache包

Sweave Cache包
EN

Stack Overflow用户
提问于 2012-03-02 18:20:32
回答 2查看 2.9K关注 0票数 13

我试图获得一份报告,而我的问题是,每次我编译R时,都会加载我在报告中使用的包(比如ggplot2、海量、立方体.)。这很费时。有办法把包裹拿出来吗?

我找到了cacheSweave,但它不起作用。

这是我在sweave文件中添加的块:

代码语言:javascript
复制
<<cacheSweave, eval=TRUE, echo=FALSE, term=FALSE, cache=TRUE>>=
library(cacheSweave) 
 lapply(c("ghyp","MASS","nloptr","cubature","ggplot2"), require, character.only=T)
@

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-05 05:16:49

由于您对knitr包很感兴趣,所以我花了一些时间实现这个特性,您可以从https://github.com/yihui/knitr下载开发版本。正如我说过的,cacheSweave不保留任何副作用;当前knitr在CRAN上的稳定版本只保留打印的副作用,加载包的副作用保存在GitHub的开发版本(>= 0.3.3)中。运行缓存块时,所有包名都缓存在文件__packages中。下次重新构建这个块时,在执行块中的代码之前将加载所有包,否则将跳过这个块。换句话说,包只有在真正需要的时候才会加载。

另一种方法是使用块钩子,这不需要安装开发版本。例如,可以添加一个名为packages的块选项,并设计如下所示的块钩子:

代码语言:javascript
复制
<<setup, include=FALSE, cache=FALSE>>=
knit_hooks$set(packages = function(before, options, envir) {
  if (before) {
    ## load packages before a chunk is executed
    for (p in options$packages) library(p, character.only = TRUE)
  }
})
@

然后,您可以使用以下块选项:

代码语言:javascript
复制
<<test, packages=c('MASS', 'ggplot2')>>=
qplot(rnorm(100))
@

其中选项packages是包名的字符向量,由上面定义的块钩子使用。这种方法的缺点是您可能必须为许多块指定这个packages向量,而第一种方法是自动的。您可能需要花几分钟学习块钩子如何在knitrhttp://yihui.name/knitr/hooks中工作。

票数 18
EN

Stack Overflow用户

发布于 2012-03-03 00:04:10

您不会在Sweave (rnw)文件中调用library(cacheSweave)。考虑以下test.rnw文件:

代码语言:javascript
复制
\documentclass{article}
<<cachedCode,cache=TRUE>>=
#this Sweave block will be cached
@
\begin{document}
\end{document}

然后,您将使用以下方法运行该程序:

代码语言:javascript
复制
require(cacheSweave)
Sweave('test.rnw', driver=cacheSweaveDriver)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9538367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档