使用 DT 包中的 backgroundColor 来更改整行而不是单个值

Use backgroundColor in DT package to change a complete row instead of a single value

答案可能很明显,但我一直在研究使用 DT 包中的 backgroundColor 属性来更改整行的颜色,而不仅仅是我用于 select 行和我没做到。

所以基本上在我的 Shiny 应用程序中,我在我的服务器文件中有一个 DataTable 输出,我在其中写了这个:

output$tableMO <- DT::renderDataTable({
    datatable(DFSurvieMO,
              options = 
                list( displayStart= numerMO()-2,
                      pageLength = 15,
                      lengthChange = FALSE, searching =FALSE),rownames= FALSE) %>% formatStyle(
      c(1:2),
      backgroundColor = 
        if(numerMO()>1) {
          styleInterval(c(DFSurvieMO[,1][numerMO()-1],DFSurvieMO[,1][numerMO()]), c('blank','lightblue', 'blank'))
        }
        else {
          styleInterval(DFSurvieMO[,1][numerMO()], c('lightblue', 'blank'))}

      )
    })

我在我的应用程序中得到的是只有一个单元格着色的数据表。我尝试使用 target = 'row',但要么我没有把它放在正确的位置,要么它不起作用。那么我怎样才能让它为整行着色呢? 谢谢。

您可以使用 rowCallback 编写一些自定义 JS 函数。下面我写了一个响应式,它会监听 slider,如果 mtcars 数据集中的 slider 值大于您的值,它将重新绘制该行。请注意,aData[1]mtcars 数据集中名为 cyl 的列。

很抱歉没有使用您的代码,因为我想做一个更通用的示例

rm(list = ls())
library(shiny)
library(DT)

ui <- basicPage(
  sliderInput("trigger", "Trigger",min = 0, max = 10, value = 6, step= 1),
  mainPanel(DT::dataTableOutput('my_table'))
)

server <- function(input, output,session) {

  my_callback <- reactive({
    my_callback <- 'function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {if (parseFloat(aData[1]) >= TRIGGER)$("td", nRow).css("background-color", "#9BF59B");}'
    my_callback <- sub("TRIGGER",input$trigger,my_callback)
    my_callback
  })

  output$my_table = DT::renderDataTable(    
    datatable(mtcars,options = list(
      rowCallback = JS(my_callback()),searching = FALSE,paging = FALSE),rownames = FALSE)
  ) 
}
runApp(list(ui = ui, server = server))