Блестящий алгоритм справки для отображения / очистки фильтров на основе выпадающего
Мне нужна помощь в определении алгоритма динамической фильтрации
Алгоритм должен делать:
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)
})