Display the selectInput value in a R shiny widget box

﹥>﹥吖頭↗ 提交于 2019-11-28 13:03:37

问题


Please run the R shiny script below, I wish to display the selectInput value in the third selectInput option in the infoBox widget and replicate the same functionality for all the tabs below. Currently it is hard coded, the script has been written using shiny modules, so kindly check. Attaching the snapshot for reference, please help.

candyData <- read.table(
text = "
Brand       Candy           value
Nestle      100Grand        Choc1
Netle       Butterfinger    Choc2
Nestle      Crunch          Choc2
Hershey's   KitKat          Choc4
Hershey's   Reeses          Choc3
Hershey's   Mounds          Choc2
Mars        Snickers        Choc5
Nestle      100Grand        Choc3
Nestle      Crunch          Choc4
Hershey's   KitKat          Choc5
Hershey's   Reeses          Choc2
Hershey's   Mounds          Choc1
Mars        Twix            Choc3
Mars        Vaid            Choc2",
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 ))
      ))
    ),
infoBox("value1", 5)
)}
# submenu <- function(input,output,session){}
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"),
           menuSubItem("Sub-item 2", tabName = "subitem2"),
           menuSubItem("Sub-item 3", tabName = "subitem3")
  ))),
  dashboardBody(
  tabItems(tabItem("dummy"),
         tabItem("subitem1", submenuUI('submenu1')),
         tabItem("subitem2", submenuUI('submenu2')),
         tabItem("subitem3", submenuUI('submenu3')))))
 server <- function(input, output,session) {

 callModule(submenuServ,"submenu1")
 callModule(submenuServ,"submenu2")
 callModule(submenuServ,"submenu3")
 }
 shinyApp(ui = ui, server = server)


回答1:


You could do this using infoBoxOutput and renderInfoBox as shown below:

candyData <- read.table(
  text = "
  Brand       Candy           value
  Nestle      100Grand        Choc1
  Netle       Butterfinger    Choc2
  Nestle      Crunch          Choc2
  Hershey's   KitKat          Choc4
  Hershey's   Reeses          Choc3
  Hershey's   Mounds          Choc2
  Mars        Snickers        Choc5
  Nestle      100Grand        Choc3
  Nestle      Crunch          Choc4
  Hershey's   KitKat          Choc5
  Hershey's   Reeses          Choc2
  Hershey's   Mounds          Choc1
  Mars        Twix            Choc3
  Mars        Vaid            Choc2",
  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 ))
          ))
    ),
    infoBoxOutput(ns("ibox"))
  )}
# submenu <- function(input,output,session){}
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]))


    output$ibox <- renderInfoBox({
      infoBox(
        "value1",
        input$Select3
      )
    })


  })}
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"),
               menuSubItem("Sub-item 2", tabName = "subitem2"),
               menuSubItem("Sub-item 3", tabName = "subitem3")
      ))),
  dashboardBody(
    tabItems(tabItem("dummy"),
             tabItem("subitem1", submenuUI('submenu1')),
             tabItem("subitem2", submenuUI('submenu2')),
             tabItem("subitem3", submenuUI('submenu3')))))
server <- function(input, output,session) {

  callModule(submenuServ,"submenu1")
  callModule(submenuServ,"submenu2")
  callModule(submenuServ,"submenu3")
}
shinyApp(ui = ui, server = server)

Hope it helps!



来源:https://stackoverflow.com/questions/48496426/display-the-selectinput-value-in-a-r-shiny-widget-box

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!