代码之家  ›  专栏  ›  技术社区  ›  mbh86 hexerei software

使用data.table对象生成动态r-markdown块

  •  4
  • mbh86 hexerei software  · 技术社区  · 7 年前

    我想用r markdown中的物种循环来自动化这段代码。

    ---
    title: "R Notebook"
    output:
      html_document:
        df_print: paged
    ---
    
    ```{r setup, echo=FALSE}
    library(knitr)
    library(data.table)
    iris.dt <- data.table(iris)
    iris.species <- stringr::str_to_title(as.character(unique(iris.dt$Species)))
    ```
    
    
    ### View by Species {.tabset .tabset-fade .tabset-pills}
    #### Setosa
    ```{r}
    iris.dt[Species == 'setosa']
    ```
    #### Versicolor
    ```{r}
    iris.dt[Species == 'versicolor']
    ```
    #### Virginica
    ```{r}
    iris.dt[Species == 'virginica']
    ```
    

    我可以使用 knit_expand (实际上我的问题和这个问题类似 Generate Dynamic R Markdown Blocks )但我很难显示其他输入,如data.table。这是我的尝试:

    ### View by Species automated {.tabset .tabset-fade .tabset-pills}
    ```{r run-numeric-md, include=FALSE}
    out = NULL
    for (i in iris.species) {
      out = c(out, knit_expand(text='#### {{i}}'))
    }
    ```
    
    `r paste(knit(text = out), collapse = '\n')`
    

    下面是笔记本的概述。

    enter image description here

    谢谢你的帮助。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Ralf Stubner    7 年前

    如果我也生成R块,它对我有用:

    ---
    title: "R Notebook"
    output:
      html_document:
        df_print: paged
    ---
    
    ```{r setup, echo=FALSE}
    library(knitr)
    library(data.table)
    iris.dt <- data.table(iris)
    iris.species <- as.character(unique(iris.dt$Species))
    ```
    
     ### View by Species automated {.tabset .tabset-fade .tabset-pills}
    ```{r run-numeric-md, include=FALSE}
    out <- vector(mode = "character", length = length(iris.species))
    for (i in iris.species) {
      out[i] <- knit_expand(text = c("#### {{stringr::str_to_title(i)}}",
                                     "```{r, echo = FALSE}",
                                     "iris.dt[Species == '{{i}}']",
                                     "```"))
    }
    ```
    
    `r paste(knit(text = out), collapse = '\n')`