2016-05-31 11 views
0

Ich habe mehrere Beiträge hier über bedingte Felder in R glänzend gelesen, und während ich ihre einfachen Beispiele neu erstellen kann, kann ich es nicht mit meiner App arbeiten.bedingte Hauptanzeige innerhalb der Registerkarte in Shiny

Ich möchte 2 Registerkarten haben (im folgenden Beispiel "Verfügbarkeit" und "Entsorgung" genannt), mit verschiedenen Hauptbedienfeldern. Insbesondere für die zweite Registerkarte möchte ich, dass das Hauptfenster von der Variableneingabe abhängig ist. Wenn input.variable2 == 'Raw_tot_manuf' 2 plot2 und plot2b anzeigt, zeigen Sie für andere Werte nur plot2 und etwas Text an. Das Hauptfenster für die erste Registerkarte wird wieder anders sein.

Basierend auf previous posts/solutions, habe ich den folgenden Code entwickelt, aber jetzt keine der Hauptbedienfelder (für beide Registerkarten) nichts anzeigen (sie vor dem Einfügen der bedingten Anweisung).

Es wird aus dem Code wohl offensichtlich sein unten, aber das ist mein erster Versuch einer glänzenden App Bau ...

ui <- 
    navbarPage(
    "My Application", 
    tabsetPanel(id = "tabs", 
       tabPanel(
        "Availability of raw milk", 
        sidebarLayout(sidebarPanel(
        selectInput(
         "variable",label = "Availability of raw milk", 
         list("UK production" = "UK_prod", 
          "Imports" = "Imports", 
          "Total available" = "Total"))), 

        mainPanel(plotOutput("plot_1"))) 
       ), 

       tabPanel("Disposal of raw milk", 
         sidebarLayout(
          sidebarPanel(selectInput(
          "variable2",label = "Disposal of raw milk", 
          list("Liquid milk" = "Raw_liq_milk", 
            "For manufacture" = "Raw_tot_manuf", 
            "Total available" = "Raw_exports", 
            "Stock change & wastage" = "Raw_wastage"))), 

          mainPanel(
          conditionalPanel(condition = "input.tabs =='Disposal of raw milk' & input.variable2=='Raw_tot_manuf'", 
               plotOutput("plot2"),plotOutput("plot2b")), 
          conditionalPanel(condition = "input.tabs =='Disposal of raw milk' & input.variable2!='Raw_tot_manuf'", 
               plotOutput("plot2"),textOutput("Nothing here"))))))) 

server<- 
    function(input, output) { 
    formulaText1 <- reactive({ 
     paste(input$variable,"~Year")}) 

    formulaText2 <- reactive({ 
     paste(input$variable2,"~Year")}) 


    manuf_data<- reactive ({ 
     if (input$variable2=="Raw_tot_manuf") 
     melt(milk_data[,c(1,7:13)],id.vars=c("Year"),variable.name="Product", value.name="million_L")}) 

    output$plot1<- renderPlot({ 
     plot(as.formula(formulaText1()))}) 

    output$plot2 <- renderPlot({ 
     plot(as.formula(formulaText2()))}) 

    output$plot2b <- renderPlot({ 
     p<- ggplot(manuf_data(), aes(x=Year, y=million_L, fill=Product)) + geom_area() 
     print(p)}) 
    } 

Antwort

0

Sie nicht ausgeben kann die gleiche Sache zweimal (plotOutput („Plot2“)). Dann bricht es immer zusammen. Sie müssen die zusätzliche Bedingung in die Plotfunktion einfügen. fx.

output$plot2b <- renderPlot(if (input$variable2=="Raw_tot_manuf") {plot(as.formula(formulaText2()))} else {}) 
+0

Danke Jacob. Das zweite "plot2" zu etwas anderem umzubenennen, hat tatsächlich funktioniert. – Flavie

Verwandte Themen