【问题标题】:Batch searching regex in Shiny DT datatables with spaces (not pipes)在带有空格(不是管道)的 Shiny DT 数据表中批量搜索正则表达式
【发布时间】:2026-01-19 00:25:04
【问题描述】:

this post 开始,谁能告诉我是否有可能实现一种搜索交互式 Shiny DT 数据表的方法,其中关键字由空格而不是管道分隔?我的应用程序的用户将拥有由空格分隔的基因列表,并且添加管道将破坏使应用程序用户友好的点。

示例代码:

## example taken from https://rstudio.github.io/DT/007-search.html
library(DT)
mtcars2 = mtcars[, c(1:5, 9)]
mtcars2$am = factor(mtcars$am, c(0, 1), c('automatic', 'manual'))
dt <- datatable(
  mtcars2, colnames = c('model' = 1),
  filter = list(position = 'top', clear = FALSE),
  options = list(
    search = list(regex = TRUE, caseInsensitive = TRUE),
    pageLength = 5
  )
)


## ----simple Shiny app with datatable----
ui <- fluidPage(
  fluidRow(
    DT::dataTableOutput("table")
  )
)

server <- function(input, output) {
  output$table <- DT::renderDataTable(dt)
}

shinyApp(ui = ui, server = server)

> sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.6

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats4    parallel  stats     graphics  grDevices utils     datasets  methods  
[9] base     

other attached packages:
 [1] ggplot2_3.3.0        DT_0.13              rsconnect_0.8.16     shinythemes_1.1.2   
 [5] dplyr_0.8.5          shiny_1.4.0.2        BiocParallel_1.20.1  MLInterfaces_1.66.5 
 [9] cluster_2.1.0        annotate_1.64.0      XML_3.99-0.3         AnnotationDbi_1.48.0
[13] IRanges_2.20.2       MSnbase_2.12.0       ProtGenerics_1.18.0  S4Vectors_0.24.4    
[17] mzR_2.20.0           Rcpp_1.0.4.6         Biobase_2.46.0       BiocGenerics_0.32.0 

【问题讨论】:

    标签: r shiny dt shinyapps


    【解决方案1】:

    这是一种方法:

    library(shiny)
    library(DT)
    
    callback <- '
    $("div.search").append($("#mySearch"));
    $("#mySearch").on("keyup redraw", function(){
      var splits = $("#mySearch").val().split(" ").filter(function(x){return x !=="";})
      var searchString = "(" + splits.join("|") + ")";
      table.search(searchString, true).draw(true);
    });
    '
    
    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)
    

    【讨论】:

    • 再次感谢您这么快回复!不确定是否发布新问题,但与上述帖子和上一篇帖子相关,如果我尝试将这两个元素合并到我的应用程序中,则搜索框不起作用。我假设这是做标签?我在下面进行了扩展(如果需要,很高兴删除并开始新帖子)。再次感谢您。
    • @LisaBreckels 禁止使用答案空间继续讨论^^。我认为问题在于,您必须将带有dataTableOutput 的内容放在tabPanel 中。 tabsetPanel 必须始终由 tabPanels 组成。
    • 这确实是问题所在!非常感谢您如此迅速地回复,真的非常感谢。
    最近更新 更多