我正在使用sparkline
包生成条形图并将其放入单元格中datatable
在闪亮的应用程序中。我已经成功地在独立的环境中产生了所需的输出datatable
,但是当我将其放入 Shiny 应用程序时,它不起作用。这可能与如何进行有关spk_add_deps()
标识 htmlwidgets。我试过移动spk_add_deps()
运行了相当多的函数并向其传递了各种标识符,但没有任何效果。
我确实在这里发现了本质上相同的问题在 Shiny 中使用迷你图渲染数据表 https://stackoverflow.com/questions/41477776/render-datatable-with-sparklines-in-shiny但给定的解决方案 (1) 依赖于在回调函数中编写迷你图的 JavaScript 代码(违背了让 Rsparkline()
函数)和(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))
但如果我将相同的内容嵌入到闪亮的应用程序中,该列将为空白:
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)