R Shiny : DT (datatable)パッケージでの scrollY + scrollCollapse のバグへの対処

ShinyのDTパッケージは極めて強力なのでShinyでアプリを作る場合にはほぼ必須で利用されているかと思います。

様々な拡張オプションがあるので別の機会にそのパワーをご紹介したいと思いますが、まずはクリティカルなバグへの対応方法を紹介します。

テーブルの行が多い場合には、縦スクロールを可能とするためにextensions = 'Scroller'を指定してscrollerscrollYオプションで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が望まれますがそれまでは上記の方法で対応するしかないですね。