ОсновнаяРецепты

Добавление значков направления к DT:Datatable

Запишу поскорей, чтобы не забыть…
Понадобилось мне к таблице в ShinyDashboard добавить «стрелочки» показывающие приросты. Ну там знаете — треугольничек вниз красный — все пропало, треугольничек вверх зеленый — дела пошли на лад.
Сама таблица реализована посредством DT:datatable. Важно — стрелочки-треугольники хочу рисовать именно в каждой ячейке данных. Как это на картинке представлено.

Изначально собирался сделать через функцию icon из пакета shiny. Оно ж для этого и заточено. Грубо говоря — эта функция подставляет класс символа шрифта Awesome в html-код страницы.
Сразу не заработало. Поискал полдня — Google по этому поводу практически ничего не выдает. Вот, практически единственное упоминание такого случая. Ну, почитал, более-менее все понял. Сделал прототип — заработало.

И тут мне понадобилось отвлечься на пару дней. Важный урок — я не сохранил прототип. Зачем — R-Studio же сохраняет все открытые файлы.
Ну и естественно, мне зачем то после понадобилось закрыть все открытые окна в R-studio. Прощай мой прототип!

После возвращения к этой работе — я попытался восстановить тот несложный пример из 5 строчек. Так вот — НЕ ЗАРАБОТАЛО, не помогало ничего.
Возможно, я в процессе отвлечения обновил пакеты, либо растерял нужную часть мозга. Не знаю. Не работает никак.
Два дня бился — количество ссылок в Google так и не прибавилось.

Потом решил, что пора и прекратить биться головой об стенку, и поискать другие способы решить задачу. Вспомнил, что у icon есть возможность использовать кроме собственно Font-Awesome — еще и glyphicon. Уже не стал городить огород с использованием icon, полез в интернет и подсмотрел html-обертку для этих символов.

Собственно, все это был рефлексивный отклик на полученный опыт, а теперь собственно код, который хочу запомнить:

Библиотеки:


 library(shiny) 
 library(shinydashboard) 
 library(DT) 

Тестовые данные


 t_df <- data.frame(Строка=c('Строка 1','Строка 2'),
                    Процент=c(0.02,-0.3),  
                    stringsAsFactors = FALSE)

Функция по значению которая раскрашивает html-представление цифры и дорисовывает значок:

 add_percent_direction<- function(x)  
 { 
   ifelse(x<0,  
          res <- paste0(''  ,x,'  ', ''), 
          res <- paste0('',x,'   ', '') 
   ) 
   return(res) 
 }  

И все делаем в минималистичном shiny-dashboard:


 ui <- dashboardPage(
   dashboardHeader(),
   dashboardSidebar(),
   dashboardBody(fluidPage(box(dataTableOutput('tab'), width = 6))))

 server <- function(input, output) 
 { 
   t_df$Процент <- sapply(t_df$Процент, FUN=add_percent_direction) 
   output$tab <- renderDataTable(t_df, escape=FALSE) 
 } 

shinyApp(ui, server) 

Добавление значков направления к DT:Datatable: 3 комментария

  1. Большое спасибо за евангелистскую работу.
    Не подскажете, как сменить размер шрифта в заголовке таблицы и фиксировать заголовок (FixedHeader)

    1. Добрый день. Не очень понял про фиксацию заголовка, а сменить шрифт можно с помощью небольшой инъекции JavaScript:

        output$tab <- renderDataTable(t_df, escape=FALSE,
                                      options= list(
                                        initComplete = JS(
                                          "function(settings, json) {",
                                          "$(this.api().table().header()).css({'fontSize': '36px'});",
                                          "}")
                                      )
                                      )
      
  2. Хм, заметил что кусок кода не показывает в записи.
    Корректный кусок кода:

    ifelse(x<0,  
           res <- paste0('<span style="color: red"; display: block; text-align: right;>'  ,x,'<span class="caret"> </span> ', '</span>'), 
           res <- paste0('<span style="color: green"; display: block; text-align: right;>',x,'<span class="dropup"> <span class="caret"> </span> </span>', '</span>') 
    )
    

Добавить комментарий