美文网首页
102.关于Code Chunks的知识(2)

102.关于Code Chunks的知识(2)

作者: 心惊梦醒 | 来源:发表于2022-04-05 11:24 被阅读0次

    缓存

      每次Knit 都会执行整个R markdown文件中的代码。如果可以缓存某些运行时间较长代码的结果,在只更改了下游代码的前提下可以节省整体运行的时间。
      cache=TRUE可以缓存当前代码块运行的结果,每次运行时,如果当前代码块中的代码没有改变,则会使用缓存的结果。
      dependson=此代码块依赖的其他代码块的向量,如果依赖的代码块中的代码发生改变,dependson选项的存在可以使依赖的代码块也重新运行。
      如果markdown文档中的代码没有改变,读取的输入文件本身发生了变化,可以用cache.extra=file.info("输入文件")捕捉输入文件是否发生了变化,从而决定是否需要重新运行代码。file.info()函数范围一系列文件的信息,包括文件最后一次被编辑的时间。

    全局选项

      默认的全局变量设置可能不能满足要求,因此可以用knitr::opts_chunk$set()设置全局变量,例如:

    # echo=FALSE默认在最终文档中不显示所有的代码
    # 可以在需要展示的代码块处单独设置echo=TRUE
    knitr::opts_chunk$set(
        echo=FALSE, collapse=TRUE
    )
    

    Inline code

      可以在文档文本中直接嵌入R 代码,如下:

    My weight is  `r format(50.1234,digits=1)`.
    # Knite后的效果是:My weight is 50.1.
    

    27.4.7练习题

      1. 增加一个章节,描述钻石大小如何随着cut、color和clarity变化,假设你要给不需要看你代码的人汇报,设置全局变量达到目的。
      2. 增加一个章节描述最大的20个钻石,包括一个描述它们最重要特性的表格。
      3. 用comma <- function(x) format(x, digits = 2, big.mark = ",")函数得到漂亮的格式化输出,包含大于2.5克拉的钻石的百分比。
      4. 建立一个d依赖bcbc又都依赖a的网络代码,每个代码中打印lubridate::now(),设置cache=TRUE验证你对缓存的理解。
      答案,首先是1、2、3题:

     ---
    title: "Diamond sizes"
    date: 2016-08-25
    output: html_document
    ---
    
    ```{r setup, include = FALSE}
    library(ggplot2)
    library(dplyr)
    smaller <- diamonds |> 
      filter(carat <= 2.5)
    \```
    
    We have data about `r nrow(diamonds)` diamonds. Only 
    `r nrow(diamonds) - nrow(smaller)` are larger than
    2.5 carats. The distribution of the remainder is shown
    below:
    
    ```{r, echo = FALSE}
    smaller |> 
      ggplot(aes(carat)) + 
      geom_freqpoly(binwidth = 0.01)
    \```
    # 钻石大小如何随着cut、color和clarity变化。
    ```{r, echo=FALSE}
    knitr::opts_chunk$set(echo=FALSE)
    \```
    
    ```{r}
    library('ggpubr')
    carat_vs_cut <- ggplot(diamonds,aes(color=cut,x=carat)) + geom_freqpoly(binwidth=0.1)
    carat_vs_color <- ggplot(diamonds,aes(color=color,x=carat)) + geom_freqpoly(binwidth=0.1)
    carat_vs_clarity <- ggplot(diamonds,aes(color=clarity,x=carat)) + geom_freqpoly(binwidth=0.1)
    ggarrange(carat_vs_clarity,carat_vs_color,carat_vs_cut,nrow=3,ncol=1)
    \```
    
    # 描述最大的20个钻石的特性
    ```{r}
    sort_by_carat <- diamonds %>% arrange(desc(carat))
    knitr::kable(sort_by_carat[1:20,])
    \```
    
    # 大于2.5克拉的钻石的百分比
    ```{r}
    comma <- function(x) format(x, digits = 2, big.mark = ",")
    bigger <- diamonds %>% filter(carat>2.5)
    \```
    The percentage of diamands whose weight is more than 2.5 carat is `r comma(nrow(bigger)/nrow(diamonds))`
    

      第4题:

    ---
    title: "Untitled1"
    output: html_document
    ---
    
    ```{r a}
    lubridate::now()
    \```
    
    ```{r b, cache=TRUE, dependson="a"}
    lubridate::now()
    \```
    
    ```{r c, cache=TRUE, dependson="a"}
    lubridate::now()
    \```
    
    ```{r d, cache=TRUE, dependson=c("b","c")}
    lubridate::now()
    \```
    

    相关文章

      网友评论

          本文标题:102.关于Code Chunks的知识(2)

          本文链接:https://www.haomeiwen.com/subject/vodqsrtx.html