Блестящий алгоритм справки для отображения / очистки фильтров на основе выпадающего

Мне нужна помощь в определении алгоритма динамической фильтрации

Алгоритм должен делать:

1) Get the input region.csv from user
2) Read list of countries and states from the input table
3) Create a drop-down based on values (c("None", "Country,"State"))
4) Now, when I click None- nothing should come, Country- Only country filter should appear, state-Both country and state. 
5) When I click back Country or None, the existing filters of state or country should disappear based on selection.

Я смог сделать первые 4 шага. Но я не мог очистить существующие фильтры, когда пользователь щелкает по стране или нет. Я попробовал условные панели, но не смог этого сделать. Есть ли простой способ сделать это?

РЕДАКТИРОВАТЬ: код и данные

Данные: https://docs.google.com/spreadsheets/d/1E9dbtOMm1-7ZjIHu3Ra_NyFBHrCQdITG2_xuMIMKDOs/edit?usp=sharing

ui.r

library(shiny)

shinyUI(fluidPage(
  navbarPage(

    "DumDum",
    tabPanel("Engine",
             bootstrapPage(

               fileInput("file_attr", "Door attributes:"),
               selectInput("select", label = "Level of Normalization", choices = list("None", "Country", "State"), selected = "None"),

               uiOutput('output_values')
             )
    )
  )
))

server.r

library(shiny)

shinyServer(function(input, output, session) {


  #Reading Input Files 
  data_attr <- reactive({
    file1 <- input$file_attr
    if(is.null(file1)){return()} 
    read.table(file=file1$datapath, sep=",", header = TRUE, stringsAsFactors = FALSE)    
  })

  #Filter interactivity

  #Reading Lists
  countries <- reactive({
    if(is.null(data_attr()$Country)){return()}
    data_attr()$Country
  })

  states <- reactive({
    if(is.null(data_attr()$State)){return()}
    data_attr()$State
  })


  #Filters based on Level of normalization


  observeEvent(input$file_attr,{

    output$output_values <- renderUI({
      if (is.null(input$select)){return()}

      switch(input$select,
             "None" = h3("No normalization selected"),
             "Countries" = selectizeInput('show_vars', 'Country Filter', choices = c("Select All","None", unique(countries())), multiple = TRUE),
             "States" = selectizeInput('show_vars_state', 'State Filter', choices = c("Select All","None", unique(states())), multiple = TRUE))
    })

  })   

})

Фильтры не появляются, когда пользователь нажимает "Страна" в раскрывающемся поле. Кроме того, есть ли способ заставить фильтр состояния исчезнуть, если мы нажмем кнопку "Страна" (я имею в виду, если я нажму "Страна", должен появиться только фильтр страны; должны появиться фильтры "Страна" и "Штат")

Спасибо

1 ответ

Решение

Трудно сказать, что вы делаете неправильно, так как мы не видим ваш код. Но если я вас правильно понял, вы хотите генерировать разные выходы на основе ввода с панели selectInput. В этом случае я бы предложил использовать опции вывода uiOutput и redner со стороны сервера. Пример:

в ui.R

selectInput("filter","Choose a filter",
            choices =list("None","Countries","States"), selected = NULL),
uiOutput("output_values")

в server.R

output$output_values <- renderUI({
    if (is.null(input$filter))
      return()

switch(input$filter,
       "None" = whatever you want to output for none,
       "Countries" = whatever you want to output for countries,
       "States" = whatever you want to output for states)
})
Другие вопросы по тегам