簡體   English   中英

在 R Shiny 中突出顯示 DT 對角線

[英]Highlight DT diagonal in R Shiny

我在 Shiny 應用程序中有一個大數據表,我想突出顯示對角線,使用類似if rowNum == colNum then 'blue' else 'white'邏輯。

rowCallback DT 選項可以讓我按行號設置樣式,但我在文檔中找不到任何可以同時對列號執行等效操作的內容。

我最好的想法是在表中創建 ~200 個額外的 boolean 列,以確定每個單元格是否突出顯示,隱藏它們,並使用formatStyle(valueColumns = 201:400)設置其他單元格的樣式。 但這在這里似乎有點矯枉過正。 有什么好主意嗎?

library(tidyverse)
library(DT)
data <- rbind(c(1,2,3), c(4,5,6), c(7,8,9)) %>% as_tibble()
data
#> # A tibble: 3 x 3
#>      V1    V2    V3
#>   <dbl> <dbl> <dbl>
#> 1     1     2     3
#> 2     4     5     6
#> 3     7     8     9
data <-
  data %>%
  mutate(row_id = row_number()) %>%
  pivot_longer(-row_id) %>%
  group_by(row_id) %>%
  mutate(
    col_id = row_number(),
    value = value %>% as.character(),
    value = case_when(
      row_id == col_id ~ str_glue("<div style = 'color:red'> {value} </div>"),
      TRUE ~ value
    )
  ) %>%
  ungroup() %>%
  select(row_id, name, value) %>%
  pivot_wider() %>%
  select(-row_id)
data
#> # A tibble: 3 x 3
#>   V1                         V2                        V3                       
#>   <glue>                     <glue>                    <glue>                   
#> 1 <div style = 'color:red'>… 2                         3                        
#> 2 4                          <div style = 'color:red'… 6                        
#> 3 7                          8                         <div style = 'color:red'…

datatable(escape = FALSE, data)

在此處輸入圖像描述

@danloo 的回答給出了所需的渲染,但您應該避免在單元格中使用 HTML,因為它會干擾排序。 這是rowCallback的一種方式:

library(DT)

js <- c(
  "function(row, data, displayNum, displayIndex, dataIndex){",
  "  $('td:eq(' + dataIndex + ')', row).css('background-color', 'yellow');",
  "}"
)

dat <- as.data.frame(matrix(1:9, nrow = 3))

datatable(
  dat,
  rownames = FALSE, 
  options = list(
    rowCallback = JS(js)
  )
)

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM