【发布时间】:2014-05-19 15:21:49
【问题描述】:
在缓存目录中,可以使用lazyLoad查看chunk末尾的环境。但是块的输出(如果文档被编译,将被打印)存储在哪里?
【问题讨论】:
在缓存目录中,可以使用lazyLoad查看chunk末尾的环境。但是块的输出(如果文档被编译,将被打印)存储在哪里?
【问题讨论】:
使用源代码!
看这里的源码https://github.com/yihui/knitr/blob/master/R/cache.R
可以看到这里解释了机制(在new_cache函数内)
# when cache=3, code output is stored in .[hash], so cache=TRUE won't lose
# output as cacheSweave does; for cache=1,2, output is the evaluate() list
cache_output = function(hash, mode = 'character') {
get(sprintf('.%s', hash), envir = knit_global(), mode = mode, inherits = FALSE)
}
即它作为对象存储在knit_global environemnt`
您可以通过ls(knitr::knit_global(), all = TRUE)检查这些对象
即下面的 3 个简单的块
```{r, cache=TRUE}
summary(cars)
```
```{r }
ls(knitr::knit_global(), all = TRUE)
```
```{r }
get(ls(knitr::knit_global(), all = TRUE)[1], knitr::knit_global())
```
给出以下输出
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2
## 1st Qu.:12.0 1st Qu.: 26
## Median :15.0 Median : 36
## Mean :15.4 Mean : 43
## 3rd Qu.:19.0 3rd Qu.: 56
## Max. :25.0 Max. :120
ls(knitr::knit_global(), all = TRUE)
## [1] ".Preview-2b40490e2591_cache/unnamed-chunk-1_766fcb86fd875984b372e3c23210bfad"
## [2] "metadata"
get(ls(knitr::knit_global(), all = TRUE)[1], knitr::knit_global())
## [1] "\n```r\nsummary(cars)\n```\n\n```\n## speed dist \n## Min. : 4.0 Min. : 2 \n## 1st Qu.:12.0 1st Qu.: 26 \n## Median :15.0 Median : 36 \n## Mean :15.4 Mean : 43 \n## 3rd Qu.:19.0 3rd Qu.: 56 \n## Max. :25.0 Max. :120\n```"
如果您已退出 R,则可以使用 load 命令从缓存文件夹中的文件 *.RData 加载数据。此外,要输出get 的结果,请考虑使用cat,它将“\n”转换为行,并且应该看起来像原始输出。
【讨论】:
cat 的返回get。