Я использую пакет sparkline
для создания гистограмм для размещения в ячейках datatable
в приложении Shiny. Мне удалось получить желаемый результат в автономном datatable
, но когда я помещаю его в приложение Shiny, он не работает. Это может иметь какое-то отношение к тому, как spk_add_deps()
идентифицирует htmlwidgets. Я пробовал немного перемещать функцию spk_add_deps()
и передавать ей различные идентификаторы, и ничего не получалось.
Я нашел по сути тот же вопрос здесь Визуализировать данные со спарклайнами в Shiny, но данное решение (1) основано на написании кода JavaScript для спарклайнов в функции обратного вызова (отменяя цель наличия функции R sparkline()
) и (2) кажется, что если спарклайны отображаются в средстве просмотра, мы не можем быть все это далеко от того, чтобы заставить их отображаться в приложении Shiny без необходимости писать весь этот JavaScript.
Вот демо:
# Preliminary, load packages and build a demo table with the sparkline code merged in
library(shiny)
library(DT)
library(data.table)
library(sparkline)
## Create demo data sets
my_mtcars <- data.table(mtcars, keep.rownames = TRUE)
names(my_mtcars)[1] <- 'car_id'
set.seed(0)
data_for_sparklines <- data.table(car_id = rep(my_mtcars$car_id, 5),
category = 1:5,
value = runif(160))
sparkline_html <- data_for_sparklines[, .(sparkbar = spk_chr(value, type = 'bar')), by = 'car_id']
my_mtcars <- merge(my_mtcars, sparkline_html, by = 'car_id')
Теперь, если я визуализирую данные самостоятельно, появляются гистограммы спарклайнов:
spk_add_deps(datatable(my_mtcars, escape = FALSE))
Но если я встрою то же самое в приложение Shiny, этот столбец будет пустым:
ui <- shinyUI(fluidPage(
dataTableOutput('myTable')
))
server <- shinyServer(function(input, output, session) {
output$myTable <- renderDataTable(spk_add_deps(datatable(my_mtcars, escape = FALSE)))
})
shinyApp(ui = ui, server = server)