#r #r-markdown #reactable
Вопрос:
Я хочу создать динамические разделы в своем документе R markdown. Для этого я использую фрагменты R с asis
типом вывода. Фрагменты содержат таблицы, созданные 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("nn## My header 1 nn") reactable(data.frame(test = rnorm(3))) ## This works ``` ```{r results='asis', echo=FALSE} for (i in 1:3) { cat("nn## My header ", i 1, "nn") 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("nn## My header 1 nn") reactable(data.frame(test = rnorm(3))) ## This works ``` ```{r results='asis', echo=FALSE} for (i in 1:3) { cat("nn## My header ", i 1, "nn") print(shiny::tagList(reactable(data.frame(test = rnorm(3))))) ## now it works } ```
Комментарии:
1. Спасибо! Это делает свое дело. Кстати, список тегов определен в htmltools и экспортирован в shiny, поэтому htmltools::Список тегов будет еще более «прямым».
Ответ №2:
Вы можете попытаться экспортировать свои таблицы реакции в виде временных html-файлов, которые затем импортируете в виде текста и впоследствии удаляете.
Вот решение, которое сработало для меня:
--- title: "Test" author: "Test" date: "29 11 2021" output: html_document --- ```{r include=FALSE} library(reactable) ``` ```{r results='asis', echo=FALSE} cat("nn## My header 1 nn") reactable(data.frame(test = rnorm(3))) ## This works ``` ```{r results='asis', echo=FALSE} for (i in 1:3) { cat("nn## My header ", i 1, "nn") htmlwidgets::saveWidget(reactable(data.frame(test = rnorm(3))), file = 'temp.html') cat(readr::read_lines('temp.html')[-1]) file.remove('temp.html') } ```
Комментарии:
1. Это тоже хорошая идея, спасибо! Это, вероятно, также полезно для широкого спектра выходов, а не только для реагирования.