R Shiny ベクトル要素を縦に並べて出力する

本日はShinyのUIに配置したBOXの中にベクトルの要素を縦に一つずつ並べて出力する方法についてです。

プルダウンリストなどでは自動でやってくれるし、表形式で表示すればすむので普段それほど必要ではないだけに
いざとなったときに「あれ?」となりがちです。

こんな感じです
f:id:okdata:20190816234935p:plain:w400

お詳しい方には当然の話題かもしれませんがチョットもたついたのでメモ的にUPします。

横書き出力

まずは以下のサンプルコードをごらんください。

ベクトルの要素を書き出すためにはまず文字列にしなければならないので、17行目のように
paste(ベクトル, collapse = " ")とすれば要素間をスペース区切りにした文字列が得られますので、
これを描画すればOKです。シンプルですね。

library(shiny)
candList = c("apple", "orange", "pear", "grape")
ui <- fluidPage(
fluidRow(
br(),
column(style="border: 1px solid black; margin-left: 10px;",
width=4,
uiOutput("listOut", style = "font-size: 20px; 
        min-height:150px;")
)
)
)
server <- function(input, output) {
# holizontally
output$listOut = renderUI({
paste(candList, collapse = " ")
})
}
shinyApp(ui, server)

こんな感じで出てきます f:id:okdata:20190816235200p:plain:w400

縦書き出力

次に本日の本題ですが、冒頭の図のようにベクトルを要素ごとに縦に出力するには改行を加えておく必要がありますので、
collapse = " "の代わりにcollapse = "<br>"とすれば改行タグが入るので、
続いてこれをHTML( )として書き出せばOKです。

念のため確認しておくと、公式マニュアルでも記載がありますが、
renderUIHTMLをその中で扱うことができるので、<br>を認識してくれるということかと思います。

server <- function(input, output) {
# vertically
output$listOut = renderUI({
x = paste(candList, collapse = "<br>")
HTML(x)
})
}

以上考えれば当たり前ですが、考えるよりまず調べる検索派のかたはご参考ください。