可在 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 Markdown 中的 SQL 块访问本地数据帧吗
R Markdown 无法获取 RStudio 版本 - knit 中的错误消息