DT datatable форматный стиль когда имена строк = T, пользовательский форматный стиль не работает

#r #datatables #dt

Вопрос:

Я пытаюсь раскрасить последнюю строку данных с помощью пользовательского контейнера внутри datatable.

Я получаю что-то ожидаемое только тогда, когда rownames = T вхожу datatable(dat,rownames = T) , но это не то, что мне нужно, мне нужен тот же результат, rownames = F но это, похоже, ничего не дает.

Пожалуйста, помогите мне с помощью reprex ниже

Приведенный ниже код несколько работает, см. скриншот введите описание изображения здесь

 set.seed(1)
dat <- matrix(sample(c(0:9999), size = 54, replace = TRUE), nrow = 6) %>% as.data.frame()

sketch = htmltools::withTags(table(
  class = 'display',
  thead(
    tr(
      th(rowspan = 1, 'Customer'),
      th(colspan = 1, 'Transaction'),
      th(colspan = 11, 'Numbers')
    ),
    tr(
      lapply(colnames(dat), th)
    )
  )
))

datatable(dat,container = sketch,rownames = T,options = list(pageLength = 10, dom = 't')) %>%   # Works
  formatStyle(names(dat),
              background = styleInterval(c(0,5,10,50,100,500,1000,5000),
                                         c("#ffffff", "#f2fbd2", "#c9ecb4", "#93d3ab", "#35b0ab"
                                           ,"#E5B9ADFF","#E5B9ADFF","#D98994FF","#D0587EFF"))) %>%
  formatStyle(.,
              columns = 1:ncol(dat),
              valueColumns = 0,
              target = 'cell',
              backgroundColor = styleEqual(6, 'white'))
 

Это не работает с приведенным ниже кодом, rownames = F поскольку это единственное изменение
введите описание изображения здесь

 datatable(dat,container = sketch,rownames = F,options = list(pageLength = 10, dom = 't')) %>%   #Doesnt work
 

Спасибо.

Ответ №1:

Это нормально. Столбец имен строк равен 1,2,3,4,5,6, и вы подавляете этот столбец с rownames = FALSE помощью . Решение состоит в добавлении скрытого столбца 1,2,3,4,5,6.

 set.seed(1)
dat <- matrix(sample(c(0:9999), size = 54, replace = TRUE), nrow = 6) %>% as.data.frame()
dat <- cbind(V0 = 1:6, dat) # added column V0 = 1:6

sketch = htmltools::withTags(table(
  class = 'display',
  thead(
    tr(
      th(colspan = 1, ''),
      th(colspan = 1, 'Customer'),
      th(colspan = 1, 'Transaction'),
      th(colspan = 7, 'Numbers')
    ),
    tr(
      lapply(colnames(dat), th)
    )
  )
))

datatable(
  dat,
  container = sketch,
  rownames = FALSE,
  options = list(
    pageLength = 10, 
    dom = 't',
    columnDefs = list(
      list(targets = 0, visible = FALSE) # hide column V0
    )
  )
) %>% 
  formatStyle(
    names(dat),
    background = styleInterval(c(0,5,10,50,100,500,1000,5000),
                               c("#ffffff", "#f2fbd2", "#c9ecb4", "#93d3ab", "#35b0ab"
                                 ,"#E5B9ADFF","#E5B9ADFF","#D98994FF","#D0587EFF"))) %>%
  formatStyle(columns = 2:ncol(dat),
              valueColumns = 1,
              target = 'cell',
              backgroundColor = styleEqual(6, 'white'))