R Shinyのテーブルセルにアイコンを埋め込み表示する方法

ShinyのdataTable (DT)は強力なデータテーブルパッケージです。いろいろなオプションがあるので大抵のことはこの
パッケージでできます。さらにカスタマイズをすることでいろいろとマニアックこともできるようになります。

たとえば、セルにスパークラインの棒グラフを埋め込んだり、チェックボックスを追加したり、行を選択してダブルクリックで別のUIを操作したりなど。
ここでは、比較的簡単なカスタマイズである、DTのセルにアイコン(font awesome)を表示する方法を紹介します。

Shinyでアイコンを取り扱うときの基本はRStudio純正のicon関数になります。

マニュアルにもあるとおり

submitButton("Update View", icon = icon("refresh"))

のような形でfontawesomeのアイコンを指定するだけで簡単に使えます。

icon関数ではfont-awesome以外にもBootstrap Glyphicon
利用することが可能です。この場合は、icon("plus", lib = "glyphicon")のように指定します。

またフォントのサイズを変更する場合にはicon("calendar", "fa-3x")のように指定します。この場合は3倍になります。

テーブルのセルにアイコンを表示する方法

では具体的にテーブルのセルにアイコンを埋め込んで表示する方法を紹介します。

以下の例では、x0,y0に乱数を10個、z0glyphiconplusアイコンを10個表示、tableOutputで表示しています。

ポイントは、sanitize.text.function = function(x) xのところです。これがないと、HTMLがそのままセルに埋め込まれて表示されてしまいますので
おまじないとして入れておけばうまく表示されます。

library(shiny)
ui <- fluidPage(
tableOutput("dfTable")
)
server <- function(input, output) {
x0 = rnorm(10)
y0 = rnorm(10)
z0 = rep(as.character(icon("plus", lib = "glyphicon")), len=10)
df = data.frame(x0, y0, z0)
# print table
output$dfTable = renderTable({
df
}, sanitize.text.function = function(x) x)
}
shinyApp(ui, server)
DTパッケージのテーブルのアイコンを埋め込む方法

強力なDTパッケージでも簡単にアイコンを埋め込むことが可能です。

ポイントはテーブルを作るdatatable関数をescape=FALSEとしておくことです。
これがないと上記同様、HTMLがそのままセルに埋め込まれて出力されます。

library(shiny)
library(DT)
ui <- fluidPage(
dataTableOutput("dfTable")
)
server <- function(input, output) {
x0 = rnorm(10)
y0 = rnorm(10)
z0 = rep(as.character(icon("plus", lib = "glyphicon")), len=10)
df = data.frame(x0, y0, z0)
output$dfTable = renderDT({
datatable(df, escape = FALSE)
})
}
shinyApp(ui, server)

このescape=FALSEはDTテーブルにスパークラインやクリックできるボタンなどチョット変わったものを埋め込んで出力するときにはよく設定する必要が出てきます。
また別のタイミングでご紹介できればと思います。