基于逻辑向量格式化 DT::datatables

问题描述 投票:0回答:1

我目前想使用

dataFrame
shiny
包对我的
DT
使用颜色格式。我的桌子大概是这样的。

| val1     | val2  | 
| ---------|------ |
| a        | b     |
| a        | a     |
| b        | b     |

每当

val1
满足时,我想将
val1[i] == val2[i]
的文本颜色更改为红色。所以结果表应该是这样的。

| val1     | val2  | 
| ---------|------ |
| a        | b     |
| a*       | a     |    * = red
| b*       | b     |

从文档中,我看到可以使用

DT::formatstyle
应用条件格式。但是,其中指定的条件必须依赖于表的单列。当然,我可以创建一个新专栏

dat$condition = ( val1 == val2 )

但是此列也显示在小部件中,这是我不希望发生的情况。 (除非有办法删除

datatables
对象的列)。我正在寻找一个函数
addcolor_conditional
可以做这样的事情

condition_vector = ( val1 == val2 )
datatable( mtcars ) %>% addcolor_conditional( 
  condition_vector, color = "red" )

如有任何帮助,我们将不胜感激

r shiny conditional-formatting dt htmlwidgets
1个回答
2
投票

您可以使用

rowCallback
参数和一些 js 代码来做到这一点。看看下面的最小代码:

library(shiny)
 library(DT)
 
 
 data_ <- data.frame(A = 1:5, B=c(1,3,6,4,5))
 
 ui <- fluidPage(
   
   
   dataTableOutput("table")
 )

 server <- function(input, output){
   
   output$table <- renderDataTable({
    datatable(data_, rownames = FALSE, options = list(rowCallback = JS(
                     "function(nRow, aData) {
                     if (parseFloat(aData[0]) >= parseFloat(aData[1])){
                     $('td:eq(0)', nRow).css('color', 'red');
                     }
                     }")
                   ))
     
     
   }) 
   
 }
 
 shinyApp(ui = ui, server = server)

使用代码得到的输出如下:

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.