答案可能很明显,但我一直在研究使用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'
,但要么我没有把它放在正确的位置,要么它不起作用。那么我怎么能让它为整行着色呢?
谢谢。
答案 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))