Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在基于正则表达式的文本中突出显示DT中的单词_R_Shiny_Dt - Fatal编程技术网

R 在基于正则表达式的文本中突出显示DT中的单词

R 在基于正则表达式的文本中突出显示DT中的单词,r,shiny,dt,R,Shiny,Dt,在shinny中使用DT,我希望能够突出显示所选单词。设置searchHighlight=TRUE与我想要的接近,但这也会突出显示包含搜索的单词。例如,如果我正在搜索“on”,它也将匹配“石头”,强调中间的“on”。p> 示例图像: 我可以优化搜索选项,使其regex=TRUE,但不会突出显示。例如,如果我想使用类似“on | in”的正则表达式,这也是正确的 示例(包括正则表达式): 库(闪亮) 图书馆(DT) 库(数据表) 示例_data我不确定这是否是您想要的,但我认为这很接近:这不会执

在shinny中使用DT,我希望能够突出显示所选单词。设置
searchHighlight=TRUE
与我想要的接近,但这也会突出显示包含搜索的单词。例如,如果我正在搜索“on”,它也将匹配“石头”,强调中间的“on”。p> 示例图像:

我可以优化搜索选项,使其
regex=TRUE
,但不会突出显示。例如,如果我想使用类似“on | in”的正则表达式,这也是正确的

示例(包括正则表达式):

库(闪亮)
图书馆(DT)
库(数据表)

示例_data我不确定这是否是您想要的,但我认为这很接近:这不会执行精确搜索(例如“on”将匹配“stone”),但这只会突出显示精确匹配(例如,“on”将不会突出显示)。这将使用
mark.js

dtable <- datatable(iris[c(1,2,51,52,101,102),], 
                    options = list(
                      mark = list(accuracy = "exactly")
                    )
)
dep1 <- htmltools::htmlDependency(
  "datatables.mark", "2.0.1", 
  src = c(href = "https://cdn.datatables.net/plug-ins/1.10.19/features/mark.js"),
  script = "datatables.mark.min.js")
dep2 <- htmltools::htmlDependency(
  "jquery.mark", "8.11.1", 
  src = c(href = "https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1"), 
  script = "jquery.mark.min.js")
dtable$dependencies <- c(dtable$dependencies, list(dep1, dep2))
dtable

dtable您可以创建一个
reactive
元素,该元素首先根据输入进行过滤,然后用嵌入
标记中的相同单词替换匹配单词,而不必依赖datatable的搜索功能。这将允许通过更复杂的正则表达式实现更大的搜索灵活性

您需要将
escape=F
添加到
datatable
中,以便正确解释HTML标记。我已将
options=list(dom=“lt”)
添加到
datatable
中,以删除datatable的搜索字段,并将注意力引向左侧的搜索字段

过滤条件保持相当模糊,以防止表消失,直到找到完美匹配-即,当您键入“o”时,表不应消失,因为没有完美匹配,然后在“on”处重新出现。只有在找到匹配的单词时,才会显示突出显示,即
上的
上的
上的
,而不是
石头
烤饼
,等等。下面是它的大致外观:

这是代码。请注意,我使用了dplyr的过滤和变异函数,因为它们可以通过
*\u all
变体轻松应用于多个列:

库(闪亮)
图书馆(DT)
库(数据表)
库(dplyr)#用于'filter\u all'和'mutate\u all'。
示例_数据%
#在HTML中将完整的单词替换为相同的单词。
突变所有(~gsub(
粘贴(c(“\\b”(“,输入$word\u选择“)\\b”),折叠=”),
"\\1",
.,
是的,
真的
)
)
})
#在这里呈现你的反应元素。

输出$word\u搜索谢谢!这看起来很有希望。我已经在闪亮的应用程序中检查过了,它几乎可以工作了。我注意到的一件事是,它不会突出带有标点符号的单词——例如,如果单词类似于“(on)”,或者在类似于“on”的句子末尾。你知道如何处理这个问题吗?另外(不太重要的是)有没有改变高光颜色的方法?我的屏幕是一个非常淡的黄色,不够亮,不能真正突出。@Megan去看医生。你可以用CSS控制颜色。我不知道标点符号。谢谢,这基本上有效!它不一定适用于regex元素,但我认为我可以用这种方法解决这个问题。注意:我使用下面的代码为反应式使用data.table(不过滤,因为我不需要它,但可以使用类似的方法):
example_data_dt[,lapply(.SD,function(x)gsub(paste0(\\b(“,input$word_select,”)\\b”),“\\1”,x,TRUE,TRUE))]
我真的很感激这篇文章从一个不同的角度来看待这个问题,以及我是如何尝试去做的(从DT内部):@Megan很高兴听到它的工作!这种策略还有一个优点,那就是对您可以做什么的限制更少。例如,使用if-else条件,您可以使用一种颜色进行部分匹配,另一种颜色用于完全匹配,等等。我可能弄错了,但datatable内置的搜索高亮显示功能看起来不是很通用。
dtable <- datatable(iris[c(1,2,51,52,101,102),], 
                    options = list(
                      mark = list(accuracy = "exactly")
                    )
)
dep1 <- htmltools::htmlDependency(
  "datatables.mark", "2.0.1", 
  src = c(href = "https://cdn.datatables.net/plug-ins/1.10.19/features/mark.js"),
  script = "datatables.mark.min.js")
dep2 <- htmltools::htmlDependency(
  "jquery.mark", "8.11.1", 
  src = c(href = "https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1"), 
  script = "jquery.mark.min.js")
dtable$dependencies <- c(dtable$dependencies, list(dep1, dep2))
dtable