根据逻辑向量格式化 DT::datatables
Formating DT::datatables based on logical vector
我目前想使用 shiny
和 DT
包为我的 dataFrame
设置颜色格式。我的 table 大致是这样的。
| val1 | val2 |
| ---------|------ |
| a | b |
| a | a |
| b | b |
我想在满足 val1[i] == val2[i]
时将 val1
的文本颜色更改为红色。所以结果 table 应该是这样的。
| val1 | val2 |
| ---------|------ |
| a | b |
| a* | a | * = red
| b* | b |
从文档中,我看到 DT::formatstyle
可以应用条件格式。但是,此处指定的条件必须依赖于 table 的 单列 。当然,我可以用
创建一个新列
dat$condition = ( val1 == val2 )
但是此列也显示在我不想发生的小部件中。 (除非有一种方法可以删除 datatables
对象的列)。我正在寻找一个函数 addcolor_conditional
做这样的事情
condition_vector = ( val1 == val2 )
datatable( mtcars ) %>% addcolor_conditional(
condition_vector, color = "red" )
如有任何帮助,我们将不胜感激
您可以使用 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)
您使用代码得到的输出如下:
希望对您有所帮助!
我目前想使用 shiny
和 DT
包为我的 dataFrame
设置颜色格式。我的 table 大致是这样的。
| val1 | val2 |
| ---------|------ |
| a | b |
| a | a |
| b | b |
我想在满足 val1[i] == val2[i]
时将 val1
的文本颜色更改为红色。所以结果 table 应该是这样的。
| val1 | val2 |
| ---------|------ |
| a | b |
| a* | a | * = red
| b* | b |
从文档中,我看到 DT::formatstyle
可以应用条件格式。但是,此处指定的条件必须依赖于 table 的 单列 。当然,我可以用
dat$condition = ( val1 == val2 )
但是此列也显示在我不想发生的小部件中。 (除非有一种方法可以删除 datatables
对象的列)。我正在寻找一个函数 addcolor_conditional
做这样的事情
condition_vector = ( val1 == val2 )
datatable( mtcars ) %>% addcolor_conditional(
condition_vector, color = "red" )
如有任何帮助,我们将不胜感激
您可以使用 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)
您使用代码得到的输出如下:
希望对您有所帮助!