rmarkdown reports plantillas language examples r shiny refactoring r-markdown flexdashboard

reports - Cómo refactorizar la parte del servidor del código Shiny de las secciones de Rmarkdown



shiny r (1)

Tengo la siguiente aplicación Shiny-dashboard completamente ejecutiva:

--- title: "Test" runtime: shiny output: flexdashboard::flex_dashboard: orientation: rows theme: bootstrap vertical_layout: scroll --- ```{r setup, include=FALSE} library(flexdashboard) library(tidyverse) ``` Basic ===================================== Inputs_basic {.sidebar} ------------------------------------- ```{r io_processes} selectInput("mpg_thres", label = "MPG threshold", choices = c(10,20,30,40), selected = 10) selectInput("cyl_thres", label = "CYL threshold", choices = c(4,5,6,7,8), selected = 4) ``` Rows {data-height=500} ------------------------------------- ### Scatter Plot ```{r show_scattr} mainPanel( renderPlot( { dat <- as.tibble(mtcars) %>% select(mpg, cyl) %>% filter(mpg > input$mpg_thres & cyl > input$cyl_thres) ggplot(dat, aes(mpg, cyl)) + geom_point() }) ) ``` Rows {data-height=500} ------------------------------------- ### Show verbatim ```{r show_verbatim} mainPanel( renderPrint( { dat <- as.tibble(mtcars) %>% select(mpg, cyl) %>% filter(mpg > input$mpg_thres & cyl > input$cyl_thres) dat }) ) ```

Tenga en cuenta que la siguiente parte del código es redundante entre dos secciones diferentes de Rmarkdown Gráfico de dispersión y Mostrar literalmente .

dat <- as.tibble(mtcars) %>% select(mpg, cyl) %>% filter(mpg > input$mpg_thres & cyl > input$cyl_thres)

¿Cómo puedo factorizarlo?

Para completar, la captura de pantalla de la aplicación es la siguiente:


Use una expresión de datos reactiva, cambie los fragmentos de salida a:

### Scatter Plot ```{r show_scattr} dat <- reactive( { as.tibble(mtcars) %>% select(mpg, cyl) %>% filter(mpg > input$mpg_thres & cyl > input$cyl_thres) } ) mainPanel( renderPlot( { ggplot(dat(), aes(mpg, cyl)) + geom_point() }) ) ``` ### Show verbatim ```{r show_verbatim} mainPanel( renderPrint( { dat() }) ) ```

Tenga en cuenta el uso de reactive , así como llamar a dat como una función ( dat() ).

reactive se asegura de que cada vez que se cambien las entradas, se dat calcular dat .