Добавление значков направления к 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) 

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