如何修改R Shiny中RenderDT的内置搜索栏,以允许多个条目以逗号分隔?

k5ifujac  于 2023-06-03  发布在  其他
关注(0)|答案(1)|浏览(162)

我一直在尝试在shiny上的renderdt表函数的搜索栏上添加多个条目。例如,在下面的代码中,我不想有一个新的搜索栏,而是想修改renderDT中内置的搜索栏,并允许它包含多个条目,逗号分隔;例如setosa,virginica应该带来同时具有setosa和virginica的行。我找到了添加一个新搜索栏的解决方案,但我想知道我是否可以相应地修改这个。任何有关这方面的帮助将不胜感激。

if (interactive()) {
  library(shiny)
  library(DT)
  shinyApp(
    ui = fluidPage(fluidRow(column(12, DTOutput('tbl')))),
    server = function(input, output) {
      output$tbl = renderDT(
        iris, options = list(lengthChange = FALSE)
      )
    }
  )
}

我尝试了类似的东西,但这增加了另一个搜索栏选项,这是不必要的

if (interactive()) {
  library(shiny)
  library(DT)
  
  shinyApp(
    ui = fluidPage(
      fluidRow(DTOutput('tbl'))
    ),
    server = function(input, output) {
      output$tbl = renderDT({
        data <- iris
        
        searchItems <- unlist(strsplit(input$search, ",")) # Split input string by commas
        searchItems <- trimws(searchItems) # Remove leading/trailing whitespace
        
        filteredData <- data[data$Species %in% searchItems, ]
        
        datatable(filteredData, options = list(lengthChange = FALSE))
      })
    }
  )
}
odopli94

odopli941#

你可以使用这个代码:

library(shiny)
library(DT)

callback <- function(sep) {
  sprintf('
$("div.search").append($("#mySearch"));
$("#mySearch").on("keyup redraw", function(){
  var splits = $("#mySearch").val().split("%s").filter(function(x){return x !=="";})
  var searchString = "(" + splits.join("|") + ")";
  table.search(searchString, true).draw(true);
});
', sep)
}

ui <- fluidPage(
  tags$head(tags$style(HTML(".search {float: right;}"))),
  br(),
  tags$input(type = "text", id = "mySearch", placeholder = "Search"),
  DTOutput("dtable")
)

server <- function(input, output){
  
  output[["dtable"]] <- renderDT({
    datatable(
      iris[c(1, 2, 51, 52, 101, 102),],
      options = list(
        dom = "l<'search'>rtip"
      ),
      callback = JS(callback(","))
    )
  }, server = FALSE)
  
}

shinyApp(ui, server)

我个人比较喜欢 search builder

datatable(
  iris[c(1, 2, 51, 52, 101, 102),],
  extensions = "SearchBuilder",
  options = list(
    dom = "Qlfrtip", 
    searchbuilder = TRUE
  )
)

相关问题