こちらの記事で紹介した、リスト要素の重複した記述(tags$li)をまとめました。

まとめる前
tags$ul(list(tags$li("list1"), tags$li("list2"), tags$li("list3")))
まとめた後
tags$ul(map(list("list1", "list2", "list3"), ~tags$li(.x)))
使った関数はpurrrパッケージのmap関数です。
この記事で使用したRとパッケージのバージョンを記載しておきます。
バージョンが異なると、動作や表示も若干異なる場合があるからです。
- R 3.6.1
- htmltools 0.3.6
- purrr 0.3.2
背景と目的
こちらの記事で、Rのhtmltoolsパッケージを使い、htmlのul要素を生成しました。
tags$ul(list(tags$li("list1"), tags$li("list2"), tags$li("list3")))
このコードを見直してみると、tags$liが重複していて見ずらいです。
コードが見ずらいと疲れますし、バグの温床にもなりかねません。
そのため、見やすく書きかえようと思います。
方針
重複しているtags$liの箇所はリストの要素になっています。
そこで、リスト処理を簡潔に記述できるpurrrrパッケージのmap関数を使います。
map関数は、リストの要素に関数を適用し、その結果をリストで返してくれます。
mapの使用例
例1
library(purrr) map(list("list1", "list2", "list3"), ~.x)
[[1]] [1] "list1" [[2]] [1] "list2" [[3]] [1] "list3"
この例では、リストの各要素(.x)に対し、何の関数も適用していません。
例2
map(list("list1", "list2", "list3"), ~paste0(.x, "_new"))
[[1]] [1] "list1_new" [[2]] [1] "list2_new" [[3]] [1] "list3_new"
こちらの例では、各要素(.x)に”_new”という文字列を結合しています。
これらの例のように、mapの第二引数はチルダ(~)で始め、各要素に対する処理を記述します。
リスト要素の重複した記述をまとめる
mapを使うと、tags$ulの引数はこのように変更できます。
変更前
list(tags$li("list1"), tags$li("list2"), tags$li("list3"))
変更後
map(list("list1", "list2", "list3"), ~tags$li(.x))
重複した記述(tags$li)が、一箇所にまとまりました。
その結果、ul要素の記述はこのようになります。
変更前
tags$ul(list(tags$li("list1"), tags$li("list2"), tags$li("list3")))
変更後
tags$ul(map(list("list1", "list2", "list3"), ~tags$li(.x)))
まとめ
リスト要素の重複した記述をまとめたことで、プログラムが簡潔になりました。
次回は、table要素の上手な生成法を検討します。
では。
—
YouTube: ミサキさん
問い合わせ先
Mail: caprico.aries@gmail.com
Twitter: https://twitter.com/caprico_aries(無言フォローもお気軽に)
コメント
[…] あとは、こちらの記事どおりにすれば、ul要素は作成できます。 […]
[…] Rでリスト要素の重複した記述をまとめる(purrr::map利用) […]