ShinyのDTパッケージは極めて強力なのでShinyでアプリを作る場合にはほぼ必須で利用されているかと思います。
様々な拡張オプションがあるので別の機会にそのパワーをご紹介したいと思いますが、まずはクリティカルなバグへの対応方法を紹介します。
テーブルの行が多い場合には、縦スクロールを可能とするためにextensions = 'Scroller'
を指定してscroller
とscrollY
オプションでY軸方向の表示長さを指定して使います。
library(shiny) library(DT) ui <- fluidPage( dataTableOutput("dfTable") ) server <- function(input, output) { x0 = rnorm(100) y0 = rnorm(100) df = data.frame(x0,y0) output$dfTable = renderDT({ datatable(df, ,extensions = 'Scroller' ,options=list(dom="t" ,scroller = TRUE ,scrollY = "50vh" ) ) }) } shinyApp(ui, server)
ただし、このままでは表示する行が少ない場合など(例えば乱数を100→5とでもしてみてください)では空白行が表示されてしまうので、scrollCollapse=TRUE
オプションで
不要な空白を短縮して表示させたいと考えます。
,options=list(dom="t" ,scroller = TRUE ,scrollY = "50vh" ,scrollCollapse = TRUE )
ところが、DTパッケージのバグのためにこのオプションがうまく働きません。
こんな時は上記の中の回答で記載されている方法で解決できます。
具体的には、コールバックとしてcallback = JS("setTimeout(function() { table.draw(true); }, 500);")
を追加するだけで魔法のように解決します(感謝!)
,options=list(dom="t" ,scroller = TRUE ,scrollY = "30vh" ,scrollCollapse = TRUE ) ,callback = JS("setTimeout(function() { table.draw(true); }, 500);")
本件はstackoverflowをはじめいろいろなサイトで同様の問題提起がありますが、今のところRStudioでのアップデートはいつになることやら・・・のようです。
早期のBugFixが望まれますがそれまでは上記の方法で対応するしかないですね。