2016-04-12 20 views
1

Hallo, ich bin ziemlich neu in Shiny. Ich versuche, zwei interaktive selectInputs für meinen Benutzer zu erstellen, um Daten in der Tabelle anzuzeigen. Hier ist, was mein Code wie folgt aussieht: ui.RR glänzend: mehrere Eingänge in reaktiven {}

library(shiny) 

shinyUI(fluidPage(

    sidebarLayout(
    sidebarPanel(

     selectInput("var", 
        label = "Country", 
        choices = c("ALL", "A2", "AE")), 
     selectInput("plat", 
        label = "Platform", 
        choices = c("ALL", "Android", "IPhonePlayer")) 
    ) 
    ), 
    mainPanel(

     tableOutput(
     "view")) 
) 
)) 

server.R

library(shiny) 
library(ggplot2) 
library(dplyr) 
df <- readRDS("data/df.rds") 

shinyServer(function(input, output) { 

datasetInput <- reactive({ 

    switch(input$var, 
      "ALL" = df, 
      "A2" = df %>% filter(country == "A2"), 
      "AE" = df %>% filter(country == "AE")) 


    switch(input$plat, 
      "ALL" = df, 
      "Android" = df %>% filter(platform == "Android"), 
      "IPhonePlayer" = df %>% filter(platform == "IPhonePlayer")) 



    }) 


    output$view <- renderTable({head(datasetInput())}) 

}) 

Wenn ich den Code ausführen, nur die Auswahl auf der Plattform richtig funktioniert, während für Land, nichts passiert, wenn Ich treffe die Auswahl. Irgendwelche Ideen, welche dummen Fehler ich hier mache? Vielen Dank im Voraus!

Antwort

1

Versuchen Sie, das Ergebnis der ersten switch zu df zuzuweisen. Im Moment sind die beiden switch nicht verbunden, und die reactive gibt nur das Ergebnis der zweiten zurück.

df <- switch(input$var, 
     "ALL" = df, 
     "A2" = df %>% filter(country == "A2"), 
     "AE" = df %>% filter(country == "AE")) 
+0

Können Sie genauer sein? Ich habe versucht, es zuzuweisen, wie Sie es vorgeschlagen haben, aber immer noch das gleiche Ergebnis. Ich muss falsch zugeordnet haben. Vielen Dank! – cat88

+0

@ cat88 Ich habe gerade meine Antwort bearbeitet –

+0

Vielen Dank! Es funktioniert jetzt! Ich hoffe, du hast einen wundervollen Tag!!! – cat88

1

Nicht das, was Sie fordern, aber ich denke, Sie Ihren Code wie folgt verbessern:

datasetInput <- reactive({ 
    df %>% 
    filter(
     (input$var == 'ALL' | country == input$var) & 
     (input$plat == 'ALL' | country == input$plat) 
    ) 
}) 
+0

Vielen Dank! Das rettet mir tatsächlich einige Schwierigkeiten. – cat88