R言語で、リストをフラット化する方法について解説します。リストの操作は様々な方法がありますが、ここではtidyverseパッケージに含まれているpurrrパッケージのlist_flatten()を使用した方法についてお伝えします。

list_flatten()の概要

list_flatten()は、リストをフラット化するための関数です。リストをフラット化すると、内部階層の1つのレイヤーが削除されます。つまり、リストである要素はインライン化され、リスト以外の要素はそのまま残ります。

list_flatten()の使い方

purrr::list_flatten()の使い方は次になります。


list_flatten(
  x,
  ...,
  name_spec = "{outer}_{inner}",
  name_repair = c("minimal", "unique", "check_unique", "universal")
)

list_flatten()の引数の意味

x

リストを指定します。

これらのドットは将来の拡張用であり、空である必要があります。

name_spec = “{outer}_{inner}”

内部名と外部名の両方が存在する場合は、それらを組み合わせる方法を制御します。変数innerとouterを使用する接着仕様にする必要があります。

name_repair = c(“minimal”, “unique”, “check_unique”, “universal”)

「minimal」、「unique」、「universal」、「check_unique」のいずれかを指定します。

  • minimal: 最小限の名前が存在することを指定します。名前ばない場合は””でありNAにはなりません
  • unique: 重複した列名は、一意になるように接尾辞(サフィックス)が追加されます
  • universal: 構文の規則に従う一意的な列名を割り当てることで、エラーを発生させません
  • check_unique: 列名の修復は実行さず、代わりに列名が「unique」基準に適合しない場合はエラーが発生します

準備

あらかじめ、tidyverseパッケージを読み込んでおきます。


library(tidyverse)

リストをフラット化する

リストをフラット化するには次のようにします。


x <- list(
    x1 = 1:3,
    y1 = letters[1:5],
    z1 = list(
        x1 = 10:13,
        y1 = LETTERS[10:15]
      )
  )
list_flatten(x)

$x1
[1] 1 2 3

$y1
[1] "a" "b" "c" "d" "e"

$z1_x1
[1] 10 11 12 13

$z1_y1
[1] "J" "K" "L" "M" "N" "O"
R×purrr::list_flatten リストをフラット化する