Shiny中选项卡中的条件主面板

时间:2016-05-31 10:37:09

标签: shiny

我一直在阅读有关R shine中条件面板的几个帖子,虽然我可以重新创建他们的简单示例,但我无法让它在我的应用程序上工作。

我希望有两个标签(在下面的示例中名为“可用性”和“处理”),具有不同的主面板。特别是,对于第二个选项卡,我希望主面板以变量输入为条件。如果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)}) 
  }

1 个答案:

答案 0 :(得分:1)

你不能输出两次相同的东西(plotOutput(&#34; plot2&#34;))。然后它总是崩溃。您需要将额外条件放入绘图函数中。 FX。

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