首页 > 解决方案 > 使用 data.table 对象生成动态 R-Markdown 块

问题描述

我想通过 R Markdown 中的 Species 循环来自动化此代码。

---
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')`

这是笔记本的概述。

在此处输入图像描述

谢谢您的帮助。

标签: rr-markdownknitr

解决方案


如果我还生成 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')`

推荐阅读