[英]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')
)。
當選擇“ 汽缸”選項時,“汽車”選項“ 馬自達RX4”中的第一個選項也被選中。
如何避免第一選擇的默認選擇,這樣我就可以同時評估if
和else 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.