你能在新的环境中运行Sweave吗?

时间:2012-01-20 22:59:15

标签: r sweave

我正在编写一个与Sweave一起使用的软件包,并希望能够从全局环境中对Sweave调用进行沙盒化。这就是我认为它应该起作用但不起作用的方式:

sweaveEnv <- new.env()
eval(Sweave('myDocument.Rnw'), envir=sweaveEnv)

理想情况下,我希望保存该环境以供以后调试。

save(sweaveEnv, file='mySweaveEnv.Rda')

2 个答案:

答案 0 :(得分:3)

您只需启动一个新的R流程:

system("Rscript -e 'Sweave(\"test.Rnw\");save.image(file=\"mySweaveEnv.Rda\")'")

答案 1 :(得分:3)

如果您的主要目的是在该环境中保存对象,则可以将knitr包与块选项cache=TRUE一起使用,在这种情况下,块中的所有对象都保存在文件中,你可以稍后将它们加载到R中进行调试; knitr将分别为缓存目录下的块创建.rdx.rdb文件,您可以调用lazyLoad()将这些数据库中的对象加载到R中。

如果您想在评估块的环境中做更多事情,knitr也有chunk hooks,您可以通过钩子访问环境;所以基本上你可以做任何你想做的事情 - knitr几乎所有东西都对用户开放。请注意,在启用缓存时,会在不同的空环境中评估每个块。我还没有关于这个主题的例子,所以如果我的描述足够清楚,请告诉我。