2016-05-13 5 views
2

Im den folgenden Datenrahmen unter Verwendung eine glänzende Anwendung zu erstellen:Erstellen dynamische Eingabefelder für eine glänzende Anwendung

listIDs <- c(100,100,100,100,200,200,200,200), 
values <- c(2.12, 2.43, 2.12, 4.45, 3.23, 4.23, 3.23, 4.23), 
horses <- c(2.1, 3.2, 4.1, 4.2, 5.4, 4.7, 2.8, 2.0), 
month <- c("JAN", "FEB", "JAN", "FEB","MAY","APRIL","MAY", "APRIL"), 
df <- data.frame(listIDs, values, horses, month), 

Im Gebäude eine glänzende Anwendung mit den folgenden Registern:

ui.R

shinyUI(fluidPage(

#outlinen title 
titlePanel(title = "This is the title"), 
sidebarLayout(
sidebarPanel(

    selectInput("var1", "Select the eventID", choices = listIDs), 
    selectInput("var2", "Select the eventID", choices = month), 
    br() 
), 

mainPanel(("Personal information"), 
      plotOutput("myhist")) 
) 
)) 

server.R

library(shiny) 
library(ggplot2) 

shinyServer(function(input, output){ 

output$myhist <- renderPlot({ 

df_graph <- df[df$listIDs == input$var1,] 
df_graph <- df_graph[df_graph$month == input$var2,] 

ggplot(data=df_graph, aes(x=month, y=values, group = horses)) + 
    geom_line() + geom_point() + theme(axis.text.x = element_text(angle = 90, hjust = 1)) 

}) 
}) 

Alles funktioniert, aber die Sache ist, dass, wenn ich 100 in meiner ersten Auswahlbox wähle, ich die Optionen "JAN", "FEB", "MRT", "APRIL" bekomme (während ich nur JAN und FEB bekommen sollte). Irgendwelche Gedanken darüber, wie ich das dynamisch machen kann?

+2

Mögliches Duplikat von [R shiny passing reaktiv zu selectInput Auswahlmöglichkeiten] (http://stackoverflow.com/questions/21465411/r-shiny-passing-reactive-to-selectinput-choices) –

Antwort

2

Ihr selectInput Element, das der Monatsauswahl entspricht, sollte basierend auf dem Wert input$var1 dynamisch gerendert werden. Hier ist ein einfaches Beispiel:

shinyApp(
    ui = fluidPage(

     titlePanel(title = "This is the title"), 
     sidebarLayout(
      sidebarPanel(
       selectInput("var1", "Select the eventID", 
          choices = listIDs 
       ), 
       uiOutput("select_month_ui"), 
       br() 
      ), 
      mainPanel(
       "Personal information", 
       plotOutput("myhist") 
      ) 
     ) 
    ), 
    server = function(input, output) { 
     output$select_month_ui <- renderUI({ 
      selectInput("var2", "Select the eventID", 
         choices = df[df$listIDs %in% input$var1,"month"] 
      ) 
     }) 

     output$myhist <- renderPlot({ 
      df_graph <- df[df$listIDs == input$var1,] 
      df_graph <- df_graph[df_graph$month == input$var2,] 

      ggplot(data = df_graph, 
        aes(x = month, y = values, group = horses)) + 
       geom_line() + geom_point() + 
       theme(axis.text.x = element_text(angle = 90, hjust = 1)) 
     }) 
    } 
) 

Das selectInput Objekt aus dem UI-Code in den Server-Code als

output$select_month_ui <- renderUI({ 
     selectInput("var2", "Select the eventID", 
        choices = df[df$listIDs %in% input$var1,"month"] 
     ) 
    }) 

und ersetzt mit uiOutput("select_month_ui") bewegt wird.

+1

Eine Alternative ist die Verwendung von 'updateSelectInput '(auch auf der Serverseite) abhängig vom Ereignis von' input $ var1'. –

+0

@warmoverflow Guter Punkt; Sie sollten diese Alternative als Antwort hinzufügen. – nrussell

Verwandte Themen