1

我想在我的 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
  
}

```
4

2 回答 2

3

我刚刚发现,它在引擎盖下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
  
}

```
于 2021-11-29T09:43:04.243 回答
1

您可以尝试将您的反应表导出为临时 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')
}

```
于 2021-11-29T09:43:26.637 回答