當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R purrr list_flatten 壓平列表


展平列表會刪除內部層次結構的單層,即它內聯列表元素,而保留非列表元素。

用法

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

參數

x

一個列表。

...

這些點用於將來的擴展,並且必須為空。

name_spec

如果內部名稱和外部名稱都存在,請控製它們的組合方式。應該是使用變量 innerouter 的粘合規範。

name_repair

"minimal""unique""universal""check_unique" 之一。有關這些選項的含義,請參閱vctrs::vec_as_names()

x 類型相同的列表。如果 x 包含空列表,則列表可能會更短;如果包含長度為 1 的列表或不包含 sub-lists,則列表的長度可能相同;如果包含長度 > 1 的列表,則列表可能會更長。

例子

x <- list(1, list(2, 3), list(4, list(5)))
x |> list_flatten() |> str()
#> List of 5
#>  $ : num 1
#>  $ : num 2
#>  $ : num 3
#>  $ : num 4
#>  $ :List of 1
#>   ..$ : num 5
x |> list_flatten() |> list_flatten() |> str()
#> List of 5
#>  $ : num 1
#>  $ : num 2
#>  $ : num 3
#>  $ : num 4
#>  $ : num 5

# Flat lists are left as is
list(1, 2, 3, 4, 5) |> list_flatten() |> str()
#> List of 5
#>  $ : num 1
#>  $ : num 2
#>  $ : num 3
#>  $ : num 4
#>  $ : num 5

# Empty lists will disappear
list(1, list(), 2, list(3)) |> list_flatten() |> str()
#> List of 3
#>  $ : num 1
#>  $ : num 2
#>  $ : num 3

# Another way to see this is that it reduces the depth of the list
x <- list(
  list(),
  list(list())
)
x |> pluck_depth()
#> [1] 3
x |> list_flatten() |> pluck_depth()
#> [1] 2

# Use name_spec to control how inner and outer names are combined
x <- list(x = list(a = 1, b = 2), y = list(c = 1, d = 2))
x |> list_flatten() |> names()
#> [1] "x_a" "x_b" "y_c" "y_d"
x |> list_flatten(name_spec = "{outer}") |> names()
#> [1] "x" "x" "y" "y"
x |> list_flatten(name_spec = "{inner}") |> names()
#> [1] "a" "b" "c" "d"
源代碼:R/list-flatten.R

相關用法


注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Flatten a list。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。