2016-05-31 3 views
0

Я читал несколько сообщений здесь об условных панелях в R shiny, и, хотя я могу воссоздать их простые примеры, я не могу заставить его работать над своим приложением.условная основная панель внутри вкладки в Shiny

Я хочу иметь 2 вкладки (названные «Доступность» и «Утилизация» в примере ниже) с различными основными панелями. В частности, для второй вкладки я хотел бы, чтобы основная панель была условна на переменном вводе. Если input.variable2 == 'Raw_tot_manuf' отображает 2 plot2 и plot2b, для других значений отображает только plot2 и некоторый текст. Основная панель для первой вкладки будет еще разной.

На основании previous posts/solutions, я придумал следующий код, но теперь ни одна из основных панелей (для обеих вкладок) не отображает ничего (они делали до вставки условного оператора).

Это будет, вероятно, очевидно из приведенного ниже кода, но это моя первая попытка построения Блестящая приложение ...

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

ответ

0

Вы не можете вывести то же самое в два раза (plotOutput («Plot2»)). Затем он всегда ломается. Вам нужно добавить дополнительное условие в функцию графика. fx.

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

Thank you Jacob. Переименование второго «сюжета2» на что-то еще действительно работало. – Flavie