2017-10-31 8 views
0

sparklineパッケージを使用して、棒グラフを作成してShinyアプリのdatatableのセルに配置します。私はスタンドアロンのdatatableで目的の出力を生成することができましたが、Shinyアプリケーションに配置すると機能しません。 spk_add_deps()がhtmlウィジェットを識別する方法と関係している可能性があります。私はspk_add_deps()関数をかなり動かしてみて、さまざまな識別子を渡してみましたが、何も効果がありませんでした。(多くの)JavaScriptに頼らずに、光沢のあるアプリでdatatableセルにsparkline htmlwidgetを組み込みます

私はここにRender datatable with sparklines in Shiny 基本的に同じ質問を見つけたが、与えられた溶液(1)(R sparkline()機能を持つことの目的を破って)コールバック関数でスパークラインのためのJavaScriptコードを書くことに依存しており、(2)それビューアにスパークラインがレンダリングされた場合、そのJavaScriptをすべて記述することなく、Shinyアプリでレンダリングすることができなくなる可能性があります。ここで

はデモだ:私は自分自身でデータテーブルをレンダリングする場合

# 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)) 

datatable showing sparkline bar charts

しかし、私は同じにを埋め込む場合をその列が空白のシャイニーアプリ:

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) 

enter image description here

+0

htmlウィジェットは、デザインされたJSパッケージでのみ動作する傾向があります。誰かがRでDT + sparklineウィジェットを作成していない限り、あなたは運が悪いと思う。 –

答えて

0

htmlwidgetsパッケージを使用して解決策が見つかりました。 HTMLwidgets staticRender()renderDataTable()にコールバックを追加し、

ui <- shinyUI(fluidPage(
    getDependency('sparkline'), 
    dataTableOutput('myTable') 
)) 

そして、私は完全には理解していない理由のために:

library(htmlwidgets) 

そして、代わりに光沢のあるUI機能でスパークラインの依存関係をロードするspk_add_deps()使用getDependency()の関数:

server <- shinyServer(function(input, output, session) { 
    staticRender_cb <- JS('function(){debugger;HTMLWidgets.staticRender();}') 
    output$myTable <- renderDataTable(my_mtcars, 
            escape = FALSE, 
            options = list(drawCallback = staticRender_cb)) 
}) 

しかし、それだけで、Shiny apでレンダリングすることができますp。

関連する問題