使用 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))
答案可能很明显,但我一直在研究使用 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))