我试图获得一份报告,而我的问题是,每次我编译R时,都会加载我在报告中使用的包(比如ggplot2、海量、立方体.)。这很费时。有办法把包裹拿出来吗?
我找到了cacheSweave,但它不起作用。
这是我在sweave文件中添加的块:
<<cacheSweave, eval=TRUE, echo=FALSE, term=FALSE, cache=TRUE>>=
library(cacheSweave)
lapply(c("ghyp","MASS","nloptr","cubature","ggplot2"), require, character.only=T)
@谢谢
发布于 2012-03-05 05:16:49
由于您对knitr包很感兴趣,所以我花了一些时间实现这个特性,您可以从https://github.com/yihui/knitr下载开发版本。正如我说过的,cacheSweave不保留任何副作用;当前knitr在CRAN上的稳定版本只保留打印的副作用,加载包的副作用保存在GitHub的开发版本(>= 0.3.3)中。运行缓存块时,所有包名都缓存在文件__packages中。下次重新构建这个块时,在执行块中的代码之前将加载所有包,否则将跳过这个块。换句话说,包只有在真正需要的时候才会加载。
另一种方法是使用块钩子,这不需要安装开发版本。例如,可以添加一个名为packages的块选项,并设计如下所示的块钩子:
<<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)
}
})
@然后,您可以使用以下块选项:
<<test, packages=c('MASS', 'ggplot2')>>=
qplot(rnorm(100))
@其中选项packages是包名的字符向量,由上面定义的块钩子使用。这种方法的缺点是您可能必须为许多块指定这个packages向量,而第一种方法是自动的。您可能需要花几分钟学习块钩子如何在knitr:http://yihui.name/knitr/hooks中工作。
发布于 2012-03-03 00:04:10
您不会在Sweave (rnw)文件中调用library(cacheSweave)。考虑以下test.rnw文件:
\documentclass{article}
<<cachedCode,cache=TRUE>>=
#this Sweave block will be cached
@
\begin{document}
\end{document}然后,您将使用以下方法运行该程序:
require(cacheSweave)
Sweave('test.rnw', driver=cacheSweaveDriver)https://stackoverflow.com/questions/9538367
复制相似问题