Rでリスト要素の重複した記述をまとめる(purrr::map利用)

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

RでHTML要素(a, ul, table)を生成する(htmltools利用) | ミサキのノート
RでHTML要素の生成を試しました。使ったパッケージはhtmltoolsです。 生成したのは、こちらの要素です。 a要素ul要素table要素 3つとも問題なく生成できました。 この記事で使用したRとパッケージのバージョンを記載しておきます

まとめる前

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(無言フォローもお気軽に)

コメント

  1. […] あとは、こちらの記事どおりにすれば、ul要素は作成できます。 […]

  2. […] Rでリスト要素の重複した記述をまとめる(purrr::map利用) […]