首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中基于先前SelectInput的SelectInput值更新

R中基于先前SelectInput的SelectInput值更新
EN

Stack Overflow用户
提问于 2018-01-30 10:26:57
回答 1查看 2.8K关注 0票数 3

下面的R脚本创建了三个selectInputs,因此每个selectInput的值依赖于前一个selectInput的输入值。例如,在脚本中的数据中,"value“列值取决于"Candy”列,"Candy“列值取决于”品牌“。问题是,无论我在“品牌”栏中选择"Mars“还是"Netle”值,对应的"Candy“值”100 Brand“对两者都是相同的,因此,由于selectInput读取的值相同,所以我看不到值列中的变化。请帮我解决这个问题,也请确保脚本不会变慢。谢谢。

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-30 11:00:19

您只需在您的input$Select1中添加observeEvent以更新select3

代码语言:javascript
复制
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]))
    })
}

如果需要,可以将observeEvent转换为observe

代码语言:javascript
复制
observe({
    updateSelectInput(
        session, 'Select3',
        choices= unique(candyData$value[candyData$Brand==input$Select1 & candyData$Candy==input$Select2])
    )
})
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48519138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档