#r #shiny #flexdashboard
Вопрос:
Я пытаюсь включить Rmd, который я использовал, в flexdashboard. Мне любопытно, можно ли изолировать загруженный файл и использовать его как есть, а не писать кучу реактивных функций. Если это мой шаблон, можно ли получить статический объект с именем df
, с которым можно запустить дочерний документ?
---
title: "help"
runtime: shiny
output:
flexdashboard::flex_dashboard:
orientation: columns
---
```{r}
fileInput("data", "select data")
df <- isolate(input$data)
```
```{r, child="some_code.Rmd"}
```
Мой реальный пример делает что-то совершенно другое, но, скажем some_code.Rmd
, выглядит так:
---
title: "some code"
output: html_document
---
```{r packages, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message = FALSE)
library(tidyverse)
```
The data looks like this:
```{r}
as_tibble(df)
```
The numeric data can be summarized with the following means
```{r}
df |>
summarise(across(where(is.numeric), mean)) |>
gather()
```
Ответ №1:
В итоге это сработало:
knitr::knit()
markdown::markdownToHTML()
HTML()
—> renderUI()
---
title: "help"
runtime: shiny
output:
flexdashboard::flex_dashboard:
orientation: rows
---
Sidebar {.sidebar}
==============================================
```{r file-input}
fileInput("data", "select data")
```
Row
==============================================
```{r knit-child}
observeEvent(input$data, {
df <- isolate(read.csv(input$data$datapath))
new_env <- list2env(list(df = df))
output$res <- renderUI({
knitr::knit("some_code.Rmd", quiet = TRUE, envir = new_env) |>
markdown::markdownToHTML() |>
HTML()
})
})
uiOutput("res")
```