2016-01-21 10 views
5

Ich habe einige Daten darunter, die ich verwende, um ein Donut-Diagramm in R glänzend zu erstellen, wobei date ein Zeichen ist. Ich möchte die E-Mail auswählen können, deren Bewertung ich anzeigen möchte, aber dann in der zweiten Dropdown-Auswahl nur die Daten sehen, für die diese E-Mail aktiv ist.R Shiny selectInput, das von einem anderen selectInput abhängig ist

Zum Beispiel, wenn ich im ersten Dropdown email = xxxx wähle, möchte ich nur 'keine Aktivität' im Datumsauswahlfeld sehen. Und für email = yyyy möchte ich nur 6/17/14, 6/18/14, 6/19/14 als Auswahl sehen.

Ich habe eine Art verschachtelte Teilmenge in der UI versucht. Beispiel:

> ui <- shinyUI(fluidPage(
+ sidebarLayout(
+  sidebarPanel(
+  selectInput('Select', 'Customer:', choices = unique(as.character(dat5$email))), 
+  selectInput("User", "Date:", choices = dat5[dat5$email==input$Select,date]) 
+ ), 
+  mainPanel(plotOutput("distPlot")) 
+ ) 
+)) 

Aber dies zeigt noch alle möglichen Datumsauswahl

DATA

email date  variable value ymin ymax 
xxxx no activity e_score   0 0  0 
xxxx no activity diff   1 0  1 
yyyy 6/17/14  e_score 0.7472 0  0.7472 
yyyy 6/17/14  diff  0.2528 0.7472 1 
yyyy 6/18/14  e_score 0.373 0  0.373 
yyyy 6/18/14  diff  0.627 0.373 1 
yyyy 6/19/14  e_score 0.533 0  0.533 
yyyy 6/19/14  diff  0.467 0.533 1 

Mein Code so weit:

app.R

library(shiny) 
library(shinydashboard) 

ui <- shinyUI(fluidPage(
    sidebarLayout(
    sidebarPanel(
     selectInput('Select', 'Customer:', choices = unique(as.character(dat5$email))), 
     selectInput("User", "Date:", choices = unique(dat5$date)) 
    ), 
    mainPanel(plotOutput("distPlot")) 
) 
)) 


server <- function(input, output) { 
    output$distPlot <- renderPlot({ 
    ggplot(data = subset(dat5, (email %in% input$Select & date %in% input$User)), aes(fill=variable, ymax = ymax, ymin = ymin, xmax = 4, xmin = 3)) + 
     geom_rect(colour = "grey30", show_guide = F) + 
     coord_polar(theta = "y") + 
     geom_text(aes(x = 0, y = 0,label = round(value[1]*100))) + 
     xlim(c(0, 4)) + 
     theme_bw() + 
     theme(panel.grid=element_blank()) + 
     theme(axis.text=element_blank()) + 
     theme(axis.ticks=element_blank()) + 
     xlab("") + 
     ylab("") + 
     scale_fill_manual(values=c('#33FF00','#CCCCCC')) 

    }) 
} 
    shinyApp(ui = ui, server = server) 

Antwort

8

Sie können nicht auf Eingaben im ui.R-Teil der App zugreifen, daher müssen Sie renderUi/uiOutput verwenden, um Ihren selectInput dynamisch zu generieren.

In Ihrem ui.R könnte man hinzufügen:

uiOutput("secondSelection") 

und in Ihrem server.R:

output$secondSelection <- renderUI({ 
       selectInput("User", "Date:", choices = as.character(dat5[dat5$email==input$Select,"date"])) 
     }) 
+0

, sie habe !! Aus irgendeinem Grund musste ich 'choices = as.character (dat5 [dat5 $ email == input $ Select," date "])' ohne die Anführungszeichen um das Datum. Sonst hat super geklappt! – Hillary

+0

Ich bin verwirrt von der Antwort-Anweisung "Sie können nicht auf Eingaben in der ui.R Teil der App zugreifen". Wenn Sie das bedingte Feld verwenden, definieren Sie die Bedingung basierend auf input.panel. Ist das nicht abhängig von einer Eingabe der Benutzeroberfläche? –