【发布时间】:2026-02-16 17:40:01
【问题描述】:
我有一个简短的问题,关于在shiny 中实现的包DT。我想在闪亮的应用程序中使用可渲染的*过滤器来过滤掉包含特定单词的行。我已经在optionsregexp=TRUE 设置了,但我仍然无法使其工作
我正在使用这个正则表达式
^((?!intronic).)*$
我已经尝试逃避这部分((?!intronic).),但它也不起作用
编辑
这是我渲染表格的完整代码
DT::datatable(df,
rownames = FALSE,
selection = "none",
style = 'bootstrap',
class = 'compact display',
#class = 'compact cell-border stripe hover',
filter = list(position = 'top', clear = FALSE),
escape = FALSE,
extensions = c('Buttons'),
options = list(
stateSave = FALSE,
ordering = FALSE,
autoWidth = TRUE,
searchCols = default_search_columns,
search = list(regex = TRUE, caseInsensitive = TRUE),
columnDefs = list(
list(
className = 'dt-center',
targets = cols_to_all,
render = JS("function(data, type, row, meta) {",
"return type === 'display' && typeof data === 'string' && data.length > 14 ?",
"'<span title=\"' + data + '\">' + data.substr(0, 14) + '...</span>' : data;",
"}")
),
list(
visible = FALSE,
targets = cols_to_hide
)),
initComplete = JS(
"function(settings, json) {",
"$(this.api().table().header()).css({'font-size': '12px'});",
"}"),
#dom = 'Bfrtip',
sDom = '<"top">Blrt<"bottom">ip', # remove search general box and keep the top filters
#dom = 'BT<"clear">frti',
#dom = 'Bftir',
scroller = TRUE,
scrollX = TRUE,
#scrollY = "800px",
deferRender=TRUE,
buttons = list('colvis'),
#FixedHeader = TRUE,
pageLength = 25,
lengthMenu = list(c(25, 50, 100, -1), list('25', '50', '100', 'All'))#,
)
我已在列表中包含search 选项
EDIT2
这是我的 daframe 的一个例子,真正的有超过 50,000 行和 160 列。但是,我有兴趣将过滤器应用于名为Func.refGene的列
>dput(df)
structure(list(Chr = c("chr1", "chr1", "chr1", "chr1", "chr1",
"chr1", "chr1", "chr1", "chr1", "chr1", "chr1", "chr1", "chr1",
"chr1", "chr1"), Start = c(69511L, 876499L, 877831L, 878314L,
879676L, 879676L, 879687L, 879687L, 881627L, 887560L, 887801L,
888639L, 888659L, 889158L, 889159L), End = c(69511L, 876499L,
877831L, 878314L, 879676L, 879676L, 879687L, 879687L, 881627L,
887560L, 887801L, 888639L, 888659L, 889158L, 889159L), GATK.RefCount = c("0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0"), GATK.AltCount = c("55", "60", "138", "184", "111", "111",
"110", "110", "103", "66", "138", "73", "50", "96", "96"), GATK.Filter = c("MQ_LT_40",
"PASS", "PASS", "PASS", "PASS", "PASS", "PASS", "PASS", "PASS",
"PASS", "PASS", "PASS", "PASS", "PASS", "PASS"), Func.refGene = c("exonic",
"intronic", "exonic", "exonic", "UTR3", "UTR3", "UTR3", "UTR3",
"exonic", "intronic", "exonic", "exonic", "exonic", "splicing;intronic",
"splicing;intronic"), Gene.refGene = c("OR4F5", "SAMD11", "SAMD11",
"SAMD11", "NOC2L", "SAMD11", "NOC2L", "SAMD11", "NOC2L", "NOC2L",
"NOC2L", "NOC2L", "NOC2L", "NOC2L", "NOC2L"), GeneDetail.refGene = c(".",
".", ".", ".", "NM_015658:c.*398C>T;NM_152486:c.*143G>A", "NM_015658:c.*398C>T;NM_152486:c.*143G>A",
"NM_015658:c.*387A>G;NM_152486:c.*154T>C", "NM_015658:c.*387A>G;NM_152486:c.*154T>C",
".", ".", ".", ".", ".", "NM_015658:exon8:c.888+4C>G", "NM_015658:exon8:c.888+3T>G"
)), row.names = c(NA, 15L), class = "data.frame")
【问题讨论】:
-
这里没有足够的代码或示例数据来查看您的代码中是否有任何错误或是否有其他问题。所以我们能做的最好的就是用很少的证据进行猜测。如果您提出的问题包括示例输入数据、您尝试过的代码和预期的输出,您会得到更好的回答。
-
您可以运行
str(df)来查看您的df 有什么吗? -
或者最好是
dput(df),.. -
@BigDataScientist,我添加了
dput(df)