Я строю блестящее приложение на данных mtcars.У меня проблема с подсчетом значений и отображением вариантов цил кнопка .Когда all выбрано в кнопка disp , тогда cyl filter показывает точный счет, а также отображает варианты выбора.Если в disp выбраны значения, отличные от all , то cyl даст 0 отсчетов и не будет отображать варианты .Может кто-нибудь, пожалуйста, посмотрите на мои коды.Буду очень признателен.
библиотека (блестящая)
библиотека (DT)
библиотека (dplyr) библиотека (блестящая тема) библиотека (htmlwidgets) библиотека (блестящая клавиатура) библиотека (shinydashboard)
data_table<-mtcars
data_table$hp<-NULL
data_table$qsec<-NULL
data_table$drat<-NULL
#ui
ui = fluidPage(
sidebarLayout(
sidebarPanel (
uiOutput("vs_selector"),
uiOutput("carb_selector"),
uiOutput("gear_selector"),
uiOutput("cyl_selector"),
valueBoxOutput("count_gear"),
valueBoxOutput("count_cyl")),
mainPanel(
DT::dataTableOutput('mytable')
)
))
#server
server = function(input, output, session) {
output$vs_selector <- renderUI({
selectInput(inputId = "vs",
label = "vs:", multiple = TRUE,
choices = c( unique(data_table$vs)),
selected = c(0))
})
output$carb_selector <- renderUI({
req(input$vs)
available0 <- data_table[c(data_table$vs %in% input$vs ), "carb"]
selectInput(
inputId = "carb",
label = "carb:",
multiple = TRUE,
choices = c('All',as.character(unique(available0))),
selected = c('4'))
})
output$gear_selector <- renderUI({
req(input$vs, input$carb)
available <- data_table[["gear"]][data_table$vs %in% input$vs]
if(! "All" %in% input$carb){
available <- available[data_table$carb %in% input$carb]
}
selectInput(
inputId = "gear",
label = "gear:",
multiple = TRUE,
choices = c('All',as.character(unique(available))),
selected = c('4'))
})
output$cyl_selector <- renderUI({
req(input$vs, input$carb, input$gear)
available <- data_table[["cyl"]][data_table$vs %in% input$vs]
selectInput(
inputId = "cyl",
label = "cyl:",
multiple = TRUE,
choices = c('All',as.character(unique(available))),
selected = c('6', '8', '4'))
})
output$count_gear <- renderValueBox({
valueBox(
value = length(unique(thedata()[["gear"]])),
subtitle = sprintf("Number of gear values" ))
})
output$count_cyl <- renderValueBox({
#req(input$vs, input$carb, input$gear)
#available <- data_table[["cyl"]][data_table$vs %in% input$vs]
valueBox(
# if("All" %in% input$cyl) {
# value = "All"
# } else(value = length(unique(input$cyl))),
value = length(unique(thedata()[["cyl"]])),
subtitle = sprintf("Number of cyl values" ))
})
thedata <- reactive({
req(input$gear, input$vs, input$carb, input$cyl)
data_table<-data_table[data_table$vs %in% input$vs,]
if(! "All" %in% input$carb){
data_table<-data_table[data_table$carb %in% input$carb,]
}
if(! "All" %in% input$gear){
data_table<-data_table[data_table$gear %in% input$gear,]
}
if(! "All" %in% input$cyl){
data_table<-data_table[data_table$cyl %in% input$cyl,]
}
data_table
})
output$mytable = DT::renderDataTable({
DT::datatable( {
thedata() # Call reactive thedata()
})
})
}
shinyApp(ui = ui, server = server)