How to Refactor the Server-Side Shiny Code from Rmarkdown Sections
I have the following fully running Shiny-dashboard app:
---
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
})
)
```
Note that the following part of the code is redundant among two different sections of the Rmarkdown Scatter Plot and Show verbatim.
dat <- as.tibble(mtcars) %>%
select(mpg, cyl) %>%
filter(mpg > input$mpg_thres & cyl > input$cyl_thres)
How can I split it?
For the sake of completeness, the screenshot of the application is as follows:
+3
source to share
1 answer
Use reactive information expression, change your output snippets to:
### 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()
})
)
```
Note the use reactive
as well as the call dat
as a function ( dat()
).
reactive
ensures that every time the inputs change is dat
recalculated.
+5
source to share