изолирующий стол r — flexdashboard для детского Rmd

#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")
```