Фильтрация таблицы и рендеринг в блестящем на основе нескольких значений из выбранного ввода - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь отфильтровать и отобразить таблицу в блестящем виде на основе нескольких значений из выбранного ввода. Идея заключается в том, что пользователь может выбрать несколько значений из параметров 1.Select config и одно значение из 2.Select var. На основании этих значений он должен отфильтровать эти данные из таблицы testdata и отобразить их в основной панели. Что Значения в выпадающих списках - не что иное, как уникальные строки из столбцов config и var. Ниже приведен код с данными. Таким образом, пользователь выбирает несколько значений из первого раскрывающегося списка, одно значение из второго раскрывающегося списка, и при щелчке по нему должно отображаться таблица.

library(shiny)
testdata <- tibble::tribble(
  ~config,       ~construct, ~var,
  "alpha,beta", "This is line 1",   12,
  "beta,gamma,alpha", "This is line 2",   15,
  "delta,alpha,tetra", "This is line 3",   21,
  "quad,core ,delta", "This is line 4",   12,
  "alpha,gamma", "This is line 5",   12,
  "beta,core", "This is line 5",   11,
  "delta,quad,tetra", "This is line 5",   21,
  "quad,tetra", "This is line 5",   12
)
config <- unique(unlist(strsplit(as.character(testdata$config), ",")))
var <- unique(unlist(strsplit(as.character(testdata$var), ",")))

ui <- fluidPage(
  title = 'Selectize examples',
  sidebarLayout(
    sidebarPanel(

      selectizeInput(
        'e2', '1.Select Config', choices = config, multiple = TRUE
      ),
      selectizeInput(
        'e3', '2. Select Var', choices = var, multiple = TRUE
      ),
      br(), 

      actionButton('select', 'Select')
    ),
    mainPanel(
      width = 10,
      DT::dataTableOutput(outputId = "mtable")

    )
  )
)

server <- function(input, output) {

  filtered_year <- reactive({
    filter(testdata, (config %in% input$e2) &
             (var %in% input$e3)
) 
  })

  fully_filtered <- eventReactive(input$select, {
    filtered_year()
  })

  output$mtable <- DT::renderDataTable({
    DT::datatable(data = fully_filtered(), options = list(pageLength = 10),
                  rownames = FALSE, class = 'display', escape = FALSE)

  })
  output$ex_out <- renderPrint({
    a <- str(sapply('e2', function(id) {
      input[[id]]
    }, simplify = FALSE))
    a
    print(a)
  })

}
shinyApp(ui = ui, server = server)

Обновленный код: добавлено отображение таблицы, в которой не отображаются отфильтрованные значения.

...