You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件设置Shiny应用中DataTable单元格背景颜色

Shiny DataTable条件格式化:匹配同行列值时更改单元格背景色

要实现当第二列(Counts)的值与同一行第三列(Comparison)的值相等时,改变第二列对应单元格的背景色,你可以通过DT包的rowCallback参数注入自定义JavaScript代码来实现。以下是修改后的完整代码:

## app.R ##
library(shiny)
library(shinydashboard)
library(DT)

comp <- structure(list(
  Source = c("dates1", "dates2", "dates3", "dates4", "dates5", "dates6", "dates7"),
  Counts = c(12L, 15L, 17L, 10L, 12L, 7L, 9L),
  Comparison = c(15, 15, 15, 15, 15, 15, 15),
  Difference = c(3, 0, -2, 5, 3, 8, 6)
), row.names = c(NA, -7L), class = "data.frame")

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    datatableOutput("table")
  )
)

server <- function(input, output) {
  
  output$table <- renderDataTable({
    datatable(
      comp,
      rowCallback = JS(
        "function(row, data) {",
        // 索引从0开始,第二列对应data[1],第三列对应data[2]
        "  if (data[1] === data[2]) {",
        // 给第二列单元格设置背景色(这里用黄色示例)
        "    $('td:eq(1)', row).css('background-color', '#FFFF00');",
        "  }",
        "}"
      )
    )
  })
}

shinyApp(ui, server)    

关键说明

  • rowCallback的作用:这个参数允许我们在每一行渲染完成后执行自定义JS逻辑,用来修改行内单元格的样式。
  • 索引对应关系:DT表格的data数组是从0开始索引的,所以第二列(Counts)对应data[1],第三列(Comparison)对应data[2]。
  • 样式自定义:你可以修改#FFFF00为任意你需要的颜色代码(比如#E8F4F8浅蓝色),或者添加其他CSS样式(如字体颜色)。

内容的提问来源于stack exchange,提问作者firmo23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:16:56