可在 R markdown `asis` 块中反应,不显示循环

reactable in R markdown `asis` chunk with loop not displayed

我想在我的 R markdown 文档中创建动态部分。为此,我使用 asis 输出类型的 R 块。这些块包含由 reactable 包创建的表。

当我在 for 循环中创建表格时,无法打印表格。我知道人们通常必须在循环中 print() 内包装图等,但这对我的情况没有影响。

如何打印表格?

---
title: "Test"
author: "Test"
date: "29 11 2021"
output: html_document
---

```{r include=FALSE}
library(reactable)

```

```{r results='asis', echo=FALSE}

cat("\n\n## My header 1 \n\n")

reactable(data.frame(test = rnorm(3)))  ## This works

```



```{r results='asis', echo=FALSE}



for (i in 1:3) {
  
  cat("\n\n## My header ", i+1, "\n\n")
  
  print(reactable(data.frame(test = rnorm(3))))  ## shows nothing
  
}

```

我刚刚发现,reactable 在幕后使用了 htmlwidgets。因此可以将结果包装在 shiny::tagList() 中以循环显示它。

---
title: "Test"
author: "Test"
date: "29 11 2021"
output: html_document
---

```{r include=FALSE}
library(reactable)

```

```{r results='asis', echo=FALSE}

cat("\n\n## My header 1 \n\n")

reactable(data.frame(test = rnorm(3)))  ## This works

```



```{r results='asis', echo=FALSE}


for (i in 1:3) {
  
  cat("\n\n## My header ", i+1, "\n\n")
  
  print(shiny::tagList(reactable(data.frame(test = rnorm(3)))))  ## now it works
  
}

```

您可以尝试将您的反应表导出为临时 html 文件,然后将其作为文本导入并随后删除。

这是一个对我有用的解决方案:

---
title: "Test"
author: "Test"
date: "29 11 2021"
output: html_document
---

```{r include=FALSE}
library(reactable)

```

```{r results='asis', echo=FALSE}

cat("\n\n## My header 1 \n\n")

reactable(data.frame(test = rnorm(3)))  ## This works

```




```{r results='asis', echo=FALSE}



for (i in 1:3) {

  cat("\n\n## My header ", i+1, "\n\n")

  htmlwidgets::saveWidget(reactable(data.frame(test = rnorm(3))),
                          file = 'temp.html')
  cat(readr::read_lines('temp.html')[-1])
  file.remove('temp.html')
}

```