Применить фильтр на стороне клиента к DT от вызова на стороне сервера до datatable - PullRequest
1 голос
/ 23 апреля 2019

Я хотел бы сделать данные с предустановленным фильтром, чтобы пользователь мог изменить фильтр. И я хочу избежать использования дополнительных интерфейсов, таких как selectInput и т. Д.

Минимальный рабочий пример: В следующем примере я хотел бы иметь предварительно установленный фильтр для столбца «Виды», например: "Virginica".

library(shiny)
library(DT)

ui <- fluidPage(
    titlePanel("Edgar Anderson's Iris Data"),
    DT::dataTableOutput('dt')
)

# Define server logic required to draw a histogram
server <- function(input, output) {
    output$dt <- renderDataTable({
        datatable(
            iris,
            filter='top',
            options=list(dom='lritp')
        )
    })
}

shinyApp(ui = ui, server = server)

Я думал, что это возможно, используя columnDefs, но, увы, я не могу понять, как это должно быть.

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Начинается следующее:

library(shiny)
library(DT)

ui <- fluidPage(
  titlePanel("Edgar Anderson's Iris Data"),
  DT::dataTableOutput('dt')
)

# Define server logic required to draw a histogram
server <- function(input, output) {
  output$dt <- renderDataTable({
    datatable(
      iris,
      filter='top',
      options=list(dom='lritp',
                   searchCols = list(NULL, NULL, NULL, NULL, NULL, list(search = '["virginica"]')))
    )
  })
}

shinyApp(ui = ui, server = server)
0 голосов
/ 24 апреля 2019

Альтернативное решение, которое я нашел, не такое элегантное, как у @ismirsehregal, заключалось в использовании прокси.Это требует определения дополнительных объектов для каждой таблицы и добавления их в реактивный поток или наблюдателя.

library(shiny)
library(DT)

ui <- fluidPage(
  titlePanel("Edgar Anderson's Iris Data"),
  DT::dataTableOutput('dt')
)

# Define server logic required to draw a histogram
server <- function(input, output) {
  dtproxy <- dataTableProxy('dt')
  output$dt <- renderDataTable({
    datatable(
      iris,
      filter='top',
      options=list(dom='lritp')
    )
  })
  observe({
    updateSearch(dtproxy, keywords=list(global=NULL, columns=c(rep('',5), '["virginica"]')))
  })
}

shinyApp(ui = ui, server = server)
...