r - 使用空格(不是管道)在 Shiny DT 数据表中批量搜索正则表达式
问题描述
在这篇文章之后,任何人都可以告诉我是否有可能实现一种搜索交互式 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
解决方案
这是一种方法:
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)
推荐阅读
- php - PHP - 带空格的 strpos()
- python-3.x - 如何使用 tika 解析器配置 google vision api
- terraform - Terraform (A)lb 重定向 http -> https
- javascript - 用酶和 Jest 测试 React:不变违规:目标容器不是 DOM 元素
- java - Android 每次运行时都会在服务器/数据库上保存日志以获取崩溃报告?
- spring-boot - Spring Boot - SSL 设置(./well-known/pki-validation)
- c++ - C++ 中的纯 ABC 是否需要是虚拟的?
- spring - 实施从登录的 jhipster 用户获取数据的方法时出现“无法解析符号”错误
- arm - 难以在具有 Mini PCIe 总线的 Spartan 6 FPGA 和 ARM-cortex A9(IMX6 架构)之间建立通信
- sql-server - Issue while adding values in SQL Server