我试图编写一个报告,我的问题是,每次我编译R加载我在报告中使用的包(如ggplot2,MASS,cubature ..).这非常耗时.有没有方法来包装?
我找到了cacheSweave,但它不起作用.
这是我在sweave文件中添加的块:
<<cacheSweave, eval=TRUE, echo=FALSE, term=FALSE, cache=TRUE>>=
library(cacheSweave)
lapply(c("ghyp","MASS","nloptr","cubature","ggplot2"), require, character.only=T)
@
Run Code Online (Sandbox Code Playgroud)
谢谢
Yih*_*Xie 18
由于您对该knitr软件包表示了兴趣,我花了一些时间来实现此功能,您可以从https://github.com/yihui/knitr下载开发版本.正如我所说,cacheSweave不保留任何副作用; knitrCRAN 的当前稳定版本仅保留了打印的副作用,并且在GitHub上的开发版本(> = 0.3.3)中保留了加载包的副作用.运行缓存的块时,所有包名都缓存在文件中__packages.下次要重建此块时,将在执行块中的代码之前加载所有包,否则将跳过此块.换句话说,只有在真正需要时才会加载包.
另一种方法是使用块挂钩,这不需要您安装开发版本.例如,您可以添加一个名为chunk的选项packages,并设计一个chunk hook,如:
<<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)
}
})
@
Run Code Online (Sandbox Code Playgroud)
然后你就可以使用这个chunk选项了
<<test, packages=c('MASS', 'ggplot2')>>=
qplot(rnorm(100))
@
Run Code Online (Sandbox Code Playgroud)
其中option packages是包名称的字符向量,由上面定义的chunk hook使用.这种方法的缺点是您可能必须packages为许多块指定此向量,而第一种方法是自动的.您可能需要花几分钟时间学习块钩子的工作方式knitr:http://yihui.name/knitr/hooks