R 闪亮:SelectizeInput选项的条件更新问题
我想选择一个对输出有影响的选项。这里有两种选择:汽车、气缸可供选择。根据所选选项,他们有不同的选择R 闪亮:SelectizeInput选项的条件更新问题,r,shiny,shinydashboard,R,Shiny,Shinydashboard,我想选择一个对输出有影响的选项。这里有两种选择:汽车、气缸可供选择。根据所选选项,他们有不同的选择 library(shiny) mtcars$cars <- rownames(mtcars) ui <- fluidPage( title = 'Select experiment', sidebarLayout( sidebarPanel( radioButtons("selectOpt", "Want to select:",
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)
然而,我观察到这两个选项总是有一个选项被选中。这可以在outputsource catinput$sel_car,input$sel_cyl,'\n'的第一行中观察到
当选择Car时,气缸选项6中的第一个选项也被选中。
当气缸选项被选中时,车内首选选项马自达RX4也被选中。
如何避免第一个选项的默认选择,以便我能够同时计算if和else if部分?单选selectizeInput始终有一个选中的选项。
从?选择输入:
精选
初始选择的值或多个值(如果多个=真)。如果未指定,则默认为单个选择列表的第一个值,而多个选择列表没有值
要获得您想要的功能,我们可以插入一种“无效”选项:
selectizeInput(
inputId = "sel_car",
label = "Select a Car",
choices = c('No car' = 0, mtcars$cars)
)
并在if中检查。。其他:
完整代码:
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)
谢谢你的解决方案。我观察到该应用程序有一种奇怪的行为。如果我在选择了choice in Car选项后选择了choice in Cylins选项,则显示的输出与预期的不一样,即具有所选气缸数的Rows。但是,如果我刷新应用程序并直接选择“在圆柱体中选择”选项,它就可以正常工作。这种行为的解决方法是什么?这种行为是预期的。conditionalPanel只是隐藏输入,但选定的值仍然存在。如果需要两个独占输入,可能需要查看updateSelectInput函数。
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)