【问题标题】:Where is knitr cached output stored?knitr 缓存输出存储在哪里?
【发布时间】:2014-05-19 15:21:49
【问题描述】:

在缓存目录中,可以使用lazyLoad查看chunk末尾的环境。但是块的输出(如果文档被编译,将被打印)存储在哪里?

【问题讨论】:

    标签: r knitr


    【解决方案1】:

    使用源代码!

    看这里的源码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”转换为行,并且应该看起来像原始输出。

    【讨论】:

    • 谢谢你!很好的例子。我将添加两个内容(我将尝试编辑)希望您不介意:(1)添加有关如何从文件夹加载 RData 的信息。以及 (2) 到cat 的返回get
    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2017-06-13
    • 1970-01-01
    相关资源
    最近更新 更多