[英]SelectInput Value update based on previous SelectInput in R shiny
The R shiny script below creates three selectInputs such that the values of each selectInput depend upon the input value of the previous selectInput. 下面的R闪亮脚本创建了三个selectInputs,以便每个selectInput的值取决于前一个selectInput的输入值。 Eg in the data in the script, "value" column values depend on "Candy" column and "Candy" column values depend on the "Brand". 例如,在脚本中的数据中,“值”列值取决于“糖果”列,而“糖果”列值取决于“品牌”。 The issue is that, whether I select "Mars" or "Netle" value in the "Brand" column, The corresponding "Candy" value "100Grand" is same for both, hence I do not see a change in the value column as the selectInput is reading the same value. 问题是,无论我在“品牌”列中选择“火星”还是“ Netle”值,两者对应的“糖果”值“ 100Grand”都是相同的,因此我看不到值列中的变化selectInput正在读取相同的值。 Kindly help me to fix this, also please ensure the script does not become slow. 请帮助我解决此问题,也请确保脚本不会变慢。 Thanks. 谢谢。
candyData <- read.table(
text = "
Brand Candy value
Mars 100Grand Choc1
Netle 100Grand Choc2
Nestle Crunch Choc3",
header = TRUE,
stringsAsFactors = FALSE)
library(shiny)
library(shinydashboard)
submenuUI <- function(id) {
ns <- NS(id)
tagList(
box(title = "Data", status = "primary", solidHeader = T, width = 12,
fluidPage(
fluidRow(
column(2,offset = 0, style='padding:1px;',
selectInput(ns("Select1"),"select1",unique(candyData$Brand))),
column(2,offset = 0,
style='padding:1px;',selectInput(ns("Select2"),"select2",choices = NULL)),
column(2, offset = 0,
style='padding:1px;',selectInput(ns("Select3"),"select3",choices=NULL ))
)))
)
}
submenuServ <- function(input, output, session){
observeEvent(input$Select1,{
updateSelectInput(session,'Select2',
choices=unique(candyData$Candy[candyData$Brand==input$Select1]))
})
observeEvent(input$Select2,{
updateSelectInput(session,'Select3',
choices=unique(candyData$value[candyData$Brand==input$Select1 &
candyData$Candy==input$Select2]))
})
}
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(
shinyjs::useShinyjs(),
id = "tabs",
menuItem("Charts", icon = icon("bar-chart-o"),
shinyjs::hidden(menuSubItem("dummy", tabName = "dummy")),
menuSubItem("Sub-item 1", tabName = "subitem1")
))),
dashboardBody(
tabItems(tabItem("dummy"),
tabItem("subitem1", submenuUI('submenu1'))
)
))
server <- function(input, output,session) {
callModule(submenuServ,"submenu1")
}
shinyApp(ui = ui, server = server)
You can just add input$Select1
in your observeEvent
to update select3 您只需在observeEvent
添加input$Select1
observeEvent
以更新select3
submenuServ <- function(input, output, session){
observeEvent(input$Select1,{
updateSelectInput(session,'Select2',
choices=unique(candyData$Candy[candyData$Brand==input$Select1]))
})
observeEvent(c(input$Select1, input$Select2),{
updateSelectInput(session,'Select3',
choices=unique(candyData$value[candyData$Brand==input$Select1 &
candyData$Candy==input$Select2]))
})
}
If you want, you can convert the observeEvent
to observe
: 如果需要,可以将observeEvent
转换为observe
:
observe({
updateSelectInput(
session, 'Select3',
choices= unique(candyData$value[candyData$Brand==input$Select1 & candyData$Candy==input$Select2])
)
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.