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

时间:2016-07-25 10:14:21

标签: r colors shiny dt

答案可能很明显,但我一直在研究使用DT包中的backgroundColor属性来改变整行的颜色,而不仅仅是我用来选择行的值而我没有&#39我设法做到了。

所以基本上在我的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'))}

      )
    })

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

1 个答案:

答案 0 :(得分:0)

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

对于不使用您的代码而道歉,因为我想制作更通用的示例

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))

enter image description here