来自复选框的多个输入,返回多个textoutput

时间:2017-11-06 15:43:39

标签: r shiny

我正在尝试创建一个闪亮的应用,允许用户从复选框中选择多个内容。根据输入,它应返回所有相关的文本输出字段。

为此,我在if语句中为复选框编制索引并使用多个条件,但在选择input1时某些操作无效:如果我同时选择input2 }和input1,然后它只显示input2的结果;如果我只选择input1,则闪亮的应用程序会崩溃。

我试图添加更多条件只是为了检查......但没有运气。

以下代码:

library(shiny)
library(shinydashboard)


ui <- shinyUI(

  navbarPage("DBC Comparison",
             tabPanel("Stats" ,
                      sidebarLayout(
                        sidebarPanel(

                          checkboxGroupInput("comp_type", "Comparison type", choices = c("input1", "input2", "input3")),

                          actionButton(
                            inputId = "submit_loc",
                            label = "Submit")
                          , width = 3),

                        mainPanel(

                          fluidRow(
                            column(6, textOutput("selected_var1")),
                            #DT::dataTableOutput("table")#, 
                            # div(style = 'overflow-x: scroll', tableOutput('table'))
                            column(6,textOutput("selected_var2"))
                        ), position="left"))
  )
))

##


##
server <- shinyServer(function(input, output) {
  observeEvent(
    eventExpr = input$submit_loc,
    handlerExpr = 
    {
      if(input$comp_type[1] == 'input2' || input$comp_type[2] == 'input2' || (input$comp_type[1] == 'input1' & input$comp_type[2]  == 'input2'))
      {
        output$selected_var2 <- renderText({ 
          "2"
        })}
      else if(input$comp_type[1] == 'input1' ||input$comp_type[2] == 'input1'||input$comp_type[3] == 'input1'|| (input$comp_type[1] == 'input1' & input$comp_type[2]  == 'input2')
                                                                           || (input$comp_type[2] == 'input1' & input$comp_type[1]  == 'input2')
      {
        output$selected_var1 <- renderText({ 
          "1"
        })
        }



    })    




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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果您没有选择至少2个项目,则

input$comp_type[2] == 'something'会生成NA。所以你的if语句会返回错误。

另外,我尝试不在观察时使用渲染 我修改你的例子以使用eventReactive更容易。

由于我没有得到任何关于你的条件的信息,我只是写了一些随机的,让你看看我将如何处理。

library(shiny)
library(shinydashboard)


ui <- shinyUI(

  navbarPage("DBC Comparison",
             tabPanel("Stats" ,
                      sidebarLayout(
                        sidebarPanel(

                          checkboxGroupInput("comp_type", "Comparison type", choices = c("input1", "input2", "input3")),

                          actionButton(
                            inputId = "submit_loc",
                            label = "Submit")
                          , width = 3),

                        mainPanel(

                          fluidRow(
                            column(6, textOutput("selected_var"))
                            #DT::dataTableOutput("table")#, 
                            # div(style = 'overflow-x: scroll', tableOutput('table'))
                          ), position="left"))
             )
  ))

##


##
server <- shinyServer(function(input, output) {

  toDisplay <- eventReactive(input$submit_loc, {
    if (all(c("input1", "input2", "input3") %in% input$comp_type)) {
      return("all input selected")
    } else if (all(c("input2", "input3") %in% input$comp_type)) {
      return("input2 and input3 selected")
    } else if ("input1" %in% input$comp_type) {
      return("At least input1 is selected")
    } else {
      return("you are not in a random case I wrote")
    }
  })
  output$selected_var <- renderText({ 
    toDisplay()
  })

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