【问题标题】:Interactive Highlighting in R DataTablesR 数据表中的交互式突出显示
【发布时间】:2026-01-07 04:45:01
【问题描述】:

感谢您的时间。

我正在尝试让闪亮的应用程序正常工作,但由于某种原因,我在渲染 DT 数据表时遇到了突出显示问题。

例如,这是有效的:

output$DT = DT::renderDataTable({DT = datatable(DT,options = list(searching = FALSE,paging = FALSE,lengthChange = FALSE,ordering = FALSE,rownames= FALSE)) %>% 
      formatStyle('TEST',backgroundColor = styleEqual(c(1,2,3,4,5), c('chartreuse', 'chartreuse4','yellow','indianred','indianred4'))) )})

但是,当尝试添加此附加行时,突出显示未出现,但代码运行:

%>% 
      formatStyle('TEST2',backgroundColor = styleEqual(c(TRUE,FALSE),c('green','red'))

我也尝试了 styleInterval,并且得到了相同的结果。

谢谢。

可重现的代码:

ui <- fluidPage(

    dataTableOutput('DF')

  )



server <- function(input, output, session) {
  DF = as.data.frame(matrix(NA,nrow=2,ncol = 2))
  DF$V1 = c(TRUE,FALSE)
  DF$V2 = c(1,2)

  output$DF = renderDataTable(DF)

  output$DF = DT::renderDataTable({DF = datatable(DF,options = list(searching = FALSE,paging = FALSE,lengthChange = FALSE,ordering = FALSE,rownames= FALSE)) %>% 
    formatStyle('V2',backgroundColor = styleEqual(c(1,2,3,4,5), c('chartreuse', 'blue','yellow','indianred','indianred4'))) %>% 
    formatStyle('V1',backgroundColor = styleEqual(c(TRUE,FALSE),c('green','red')))})

}


shinyApp(ui = ui, server = server) # RUN THE APPLICATION 

【问题讨论】:

  • 如果您包含一个完全可重现的示例和一些数据,帮助您会容易得多。
  • 我正在使用的代码非常非常长(1000 多行代码),基本上这部分包含一个带有两个变量的数据框,一个是 TRUE/FALSE(让我们保持简单,并说没有顺序),另一个包含值 1-5(相同的想法)。
  • 即使代码或数据很大,您始终可以使用假数据或基本包中常见的数据创建reproducible example。不是我编辑的,因为这是DT 表的样式问题,而不是 Shiny 本身。
  • 好的,我会这样做并回复你们。
  • 刚刚添加。抱歉花了这么长时间,* 还是有点新意!

标签: r shiny datatables dt


【解决方案1】:
> styleEqual(c(TRUE,FALSE),c('green','red'))
[1] "value == 'TRUE' ? 'green' : value == 'FALSE' ? 'red' : ''"
attr(,"class")
[1] "JS_EVAL"

value 不是'TRUE''FALSE',而是truefalse

你可以这样做:

...... %>% 
  formatStyle('V1', 
    backgroundColor = JS("value == true ? 'green' : value == false ? 'red' : ''"))

【讨论】: