R 基于筛选值高亮显示单元格内容中字符串的一部分

R 基于筛选值高亮显示单元格内容中字符串的一部分,r,shiny,dt,R,Shiny,Dt,作为中提供的示例的下一步,我希望根据过滤器值突出显示单元格中字符串的一部分,如下图所示。我试图以表格的形式强调生物序列数据中的特定基序。下面给出的是Excel VBA代码和代表性图像。有可能在R中实现这一点吗 Sub SequencePartColourMacro() Dim Col, Row, FirstRow, LastRow As Integer, Col As Long Col = 6 FirstRow = 2 LastRow = ThisWorkbook.Sheets("Sequen

作为中提供的示例的下一步,我希望根据过滤器值突出显示单元格中字符串的一部分,如下图所示。我试图以表格的形式强调生物序列数据中的特定基序。下面给出的是Excel VBA代码和代表性图像。有可能在R中实现这一点吗

Sub SequencePartColourMacro()
Dim Col, Row, FirstRow, LastRow As Integer, Col As Long

Col = 6
FirstRow = 2
LastRow = ThisWorkbook.Sheets("Sequences").Cells(Rows.Count, "F").End(xlUp).Row

Test1 = "CC"
Test2 = "TT"
Test3 = "GG"

For Row = FirstRow To LastRow
   Sequence = ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Value
   For x = 1 To Len(Sequence)
     SubSequence1 = Mid(Sequence, x, 2)
     If SubSequence1 = Test1 Then
       ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Color = RGB(0, 0, 255)
       ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Bold = True
     End If
    If SubSequence1 = Test2 Then
       ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Color = RGB(0, 102, 0)
       ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Bold = True
    End If
    If SubSequence1 = Test3 Then
       ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Color = RGB(255, 153, 0)
       ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Bold = True
    End If
 Next x
 Next Row
 End Sub

这有点冗长,但VBA通常也是如此:

library(DT)
set.seed(1986)
x <- vector()
# create fake dna or rna sequence (it's been a while since I took bio)
for (i in 1:10) {
  x[i] <- paste0(sample(c("A","G","T","C"),10,replace=TRUE), collapse="")
}

dim(x) <- c(5,2)

datatable(x, options = list(rowCallback=JS(
  "function(row,data) {
    data[0]=data[0].replace('CC','<span style=\"color:red\">CC</span>');
    data[0]=data[0].replace('TT','<span style=\"color:blue\">TT</span>');
    data[0]=data[0].replace('GG','<span style=\"color:green\">GG</span>');
    data[1]=data[1].replace('CC','<span style=\"color:red\">CC</span>');
    data[1]=data[1].replace('TT','<span style=\"color:blue\">TT</span>');
    data[1]=data[1].replace('GG','<span style=\"color:green\">GG</span>');
    $('td:eq(0)', row).html(data[0]);
    $('td:eq(1)', row).html(data[1]);
  }"
  ), dom = 't'))
库(DT)
种子集(1986)

对@Carl的代码稍加调整,就可以识别并突出显示所选字符串的所有匹配项。可能对我这样的人有用

library(DT)
set.seed(1986)
x <- vector()
 create fake dna or rna sequence (it's been a while since I took bio)
for (i in 1:10) {
 x[i] <- paste0(sample(c("A","G","T","C"),25,replace=TRUE), collapse="")
}
dim(x) <- c(5,2)

datatable(x, options = list(rowCallback=JS(
  "function(row,data) {
  data[0] = data[0]  .replace(/GA/g,'<span style=\"color:red\">GA</span>');
  data[0] = data[0]  .replace(/TT/g,'<span style=\"color:blue\">TT</span>');
  data[0] = data[0]  .replace(/TC/g,'<span style=\"color:green\">TC</span>');
  data[1] = data[1]  .replace(/GA/g,'<span style=\"color:red\">GA</span>');
  data[1] = data[1]  .replace(/TT/g,'<span style=\"color:blue\">TT</span>');
  data[1] = data[1]  .replace(/TC/g,'<span style=\"color:green\">TC</span>');
  $('td:eq(0)', row).html(data[0]  );
  $('td:eq(1)', row).html(data[1]  );
  }"
  ), dom = 't'))
库(DT)
种子集(1986)

谢谢你,卡尔。然而,我的情况是,搜索词/主题(如“TAG”和其他一些)将硬编码或在多选过滤器中提供,并且每个搜索词/主题必须以不同的fg颜色(或不同的fg和bg颜色)突出显示。这是Excel VBA中的一个小技巧,但无法在R中实现。我真的不明白你的意思。你能编辑你的问题并用VBAGreat包含一个示例吗@Carl,你成就了我的一天。如何使第二次出现以及更多出现在V1列第一行中的字符(如“TT”)也高亮显示?因此,当你说筛选值时,你不是在说表中的实际筛选搜索框。您有预定的字符串test1、test2、test3,希望在表中突出显示这些字符串吗?