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

Posted

技术标签:

【中文标题】可在 R markdown `asis` 块中反应,不显示循环【英文标题】:reactable in R markdown `asis` chunk with loop not displayed 【发布时间】:2022-01-06 03:49:35 【问题描述】:

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


```

【问题讨论】:

【参考方案1】:

我刚刚发现,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
  


```

【讨论】:

谢谢!这就是诀窍。顺便说一句,tagList 在 htmltools 中定义并导出到闪亮,因此 htmltools::tagList 会更加“直接”。【参考方案2】:

您可以尝试将您的 react-tables 导出为临时 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')


```

【讨论】:

这也是个好主意,谢谢!它可能对各种各样的输出也很有用,不仅是可反应的。

以上是关于可在 R markdown `asis` 块中反应,不显示循环的主要内容,如果未能解决你的问题,请参考以下文章

R有光泽反应传单输入

注释掉 R Markdown 中的文本(Rmd 文件)

可以从 R Markdown 中的 SQL 块访问本地数据帧吗

R Markdown 无法获取 RStudio 版本 - knit 中的错误消息

markdown Gradle的buildscript块中的共享变量

在if块中反应不渲染组件