2017-05-29 1 views
3

Ich habe folgendes voll läuft Shiny-Armaturenbrett App Refactoring:Wie Server-Teil von Shiny Code aus Rmarkdown Abschnitte

--- 
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 
    }) 

) 
``` 

Beachten Sie, dass der folgende Teil des Codes überflüssig ist unter zwei verschiedenen Rmarkdown Abschnitte Scatter Plot und Zeigen Sie wörtlich.

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

Wie kann ich es faktorisieren?


Der Vollständigkeit der Screenshot der App ist dies:

enter image description here

Antwort

5

Verwenden Sie einen reaktiven Daten Ausdruck, Ihr Ausgabebrocken ändern:

### 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() 
    }) 
) 
``` 

Beachten Sie die Verwendung von reactive sowie dat als Funktion aufrufen (dat()).

reactive stellt sicher, dass bei jeder Änderung der Eingänge dat neu berechnet wird.

Verwandte Themen