如何更新Rshiny中的情节

时间:2016-08-11 11:08:57

标签: r shiny

我正在尝试在Shiny中创建一个交互式应用程序。它看起来如下:

enter image description here

摘要:用户将带有HOUR和DEMAND的.csv文件添加为两个字段。要求进一步的用户选择单选按钮(根据下拉菜单中的选择进行更改)。正如现在可以看到的那样,选择是'500',它反映在图表中(绿色)。

我无法做到的事情:当用户进行另一次选择(比如'250')时,我想在图表中添加500 + 250。

问题:我需要以某种方式更新 eventReactive 函数中的反应式表达式 lastgang(),我认为这是不可能的。还有其他方法可以做到这一点。我是Rshiny的新手。任何指导将不胜感激。

以下是server.R和ui.R文件中的代码。

server.R

  library(ggplot2)
  library(shiny)


  shinyServer(function(input, output) {

    lastgang <- reactive({

      if(is.null(input$file)){return()} 
      data = read.table(file=input$file$datapath, header =TRUE, sep=",")
      data$source = rep(0, nrow(data))
      data
    })


    db_source =read.table(file="example.csv", header = TRUE, sep = ",")
    choice = as.character(db_source$Source.Typ)

    choose1 = reactive({

      if (is.null(input$engine)){return()} 

      subcat= character(0)

      for (i in 1:nrow(db_source)){
        if  (input$engine == as.character(db_source$Source.Typ[i]))
        {
          #count = count +1
          #subcat = c(subcat, paste(as.character(db_source$Produkt[i]),"(",as.character(db_source$kW.max[i]), "kW", ")"))
          subcat = c(subcat, db_source$kW.max[i])
        }
      }
      subcat

    })


    output$radio = renderUI({radioButtons("cp", "Select Capacity (kW)",  choices = choose1()) })


    db = eventReactive(input$update,
                       {
                         intermediate = rep(0, nrow(lastgang()))

                         temp = lastgang()
                         for ( i in 1:nrow(temp)){
                           if (temp$Demand[i] > as.numeric(input$cp) )
                           {
                             intermediate[i] =  as.numeric(input$cp)
                           }
                           else {

                             intermediate[i] = temp$Demand[i] 
                           }
                         }

                         temp$source = temp$source + intermediate
                         temp

                       })

    output$plot <- renderPlot({ 

      ggplot(db(), aes(x = Hour )) + 
        labs(title = "Supply and Demand")+
        theme(plot.title = element_text(size=16, face="bold", vjust=2))+
        geom_ribbon(aes(ymin=0, ymax=Demand), fill="red") + 
        geom_line(aes(y=Demand, colour="Demand")) + 
        geom_ribbon(aes(ymin=0, ymax=source), fill="green") + 
        geom_line(aes(y=source, colour="Supply") )+
        scale_colour_manual(name='', values=c("Demand"="red", "Supply"="green"))
    })


  })

ui.R

  library(shiny)

  shinyUI(fluidPage(
    titlePanel("Source Design"),

    sidebarLayout(
      sidebarPanel(

                  fileInput("file", label = h4("Select *.csv file")),

                  br(),
                   selectInput("engine", "Select the Source", choices = choice),
                   br(),
                   uiOutput('radio'),

                  actionButton("update", "Submit")

                   ),

      mainPanel(

        plotOutput('plot'),

      )
    )

  ))

1 个答案:

答案 0 :(得分:0)

我可能会误解这里的事情,但基于

  

当用户进行另一次选择(比如'250')时,我想在图表中显示500 + 250的添加。

我认为无线电选项可能不是您的最佳选择。

无线电选项的想法是只能选择一种替代方案。每次用户选择一个选项时,都会发生一些事情。如果您以某种方式存储旧值,那么每次用户与无线电选项交互时,您都会堆叠(在本例中为“add”)值。

也许你宁愿想要一个滑块呢?或带有建议的文字输入?