簡體   English   中英

有光澤:SelectizeInput選項的條件更新問題

[英]Shiny: Issues with conditional update of SelectizeInput choices

我想選擇一個對輸出有影響的選項。 這里有兩個選擇:汽車,油缸可供選擇。 根據選定的選項,他們有不同的選擇可供選擇。

library(shiny)

mtcars$cars <- rownames(mtcars)

ui <- fluidPage(
  title = 'Select experiment',
  sidebarLayout(
    sidebarPanel(
      radioButtons("selectOpt", "Want to select:",
                   list("Car"='car', "Cylinders"='cyl'),
                   selected = 'car'),

      conditionalPanel(
        condition = "input.selectOpt=='car'",
        selectizeInput(
          inputId = "sel_car", 
          label = "Select a Car",
          choices = mtcars$cars
        )),
      conditionalPanel(
        condition = "input.selectOpt=='cyl'",
        selectizeInput(
          inputId = "sel_cyl", 
          label = "Select Cylinders",
          choices = unique(mtcars$cyl)
        )
        )
    ),
    mainPanel(
      helpText('Output of the examples in the left:'),
      verbatimTextOutput('ex_out')
    )
  )
)

server <- function(input, output) {

    output$ex_out <- renderPrint({
      if(!is.null(input$sel_car)){
        cat(input$sel_car,input$sel_cyl,'\n')
        mtcars[mtcars$cars == input$sel_car,]
      }else if(!is.null(input$sel_cyl)){
        mtcars[mtcars$cyl == input$sel_cyl,]
      }
    })
}

shinyApp(ui, server)

但是,我觀察到總是在這兩個選項中都選擇了一個選項。 這可以在輸出的第一行中看到(源cat(input$sel_car,input$sel_cyl,'\\n') )。

選中“ 汽車”后,也會選擇“氣缸”選項6中的第一個選項。 當選擇“汽車”時

當選擇“ 汽缸”選項時,“汽車”選項“ 馬自達RX4”中的第一個選項也被選中。 當選擇“汽缸”選項時

如何避免第一選擇的默認選擇,這樣我就可以同時評估ifelse if部分?

單選select(ize)Input()始終具有選中的選項。 ?selectInput

已選
初始選擇的值(如果multiple = TRUE,則為多個值)。 如果未指定,則對於單選列表,默認為第一個值;對於多選列表,默認為第一個值。

要獲得所需的功能,我們可以插入一種“無效”的選擇:

selectizeInput(
  inputId = "sel_car", 
  label = "Select a Car",
  choices = c('No car' = 0, mtcars$cars)
)

並在if.. else

if(input$sel_car != 0){
  cat(input$sel_car,input$sel_cyl,'\n')
  mtcars[mtcars$cars == input$sel_car,]
}

完整的代碼:

library(shiny)

mtcars$cars <- rownames(mtcars)

ui <- fluidPage(
  title = 'Select experiment',
  sidebarLayout(
    sidebarPanel(
      radioButtons("selectOpt", "Want to select:",
                   list("Car"='car', "Cylinders"='cyl'),
                   selected = 'car'),

      conditionalPanel(
        condition = "input.selectOpt=='car'",
        selectizeInput(
          inputId = "sel_car", 
          label = "Select a Car",
          choices = c('No car' = 0, mtcars$cars)
        )),
      conditionalPanel(
        condition = "input.selectOpt=='cyl'",
        selectizeInput(
          inputId = "sel_cyl", 
          label = "Select Cylinders",
          choices = c('No cylinder selected' = 0, unique(mtcars$cyl)),
          selected = NA
        )
      )
    ),
    mainPanel(
      helpText('Output of the examples in the left:'),
      verbatimTextOutput('ex_out')
    )
  )
)

server <- function(input, output) {

  output$ex_out <- renderPrint({
    cat(input$sel_car)
    if(input$sel_car != 0){
      cat(input$sel_car,input$sel_cyl,'\n')
      mtcars[mtcars$cars == input$sel_car,]
    }else if(input$sel_cyl != 0){
      mtcars[mtcars$cyl == input$sel_cyl,]
    }
  })
}

shinyApp(ui, server)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM