假設我有一個命名向量的串列:
我有一個命名向量的串列。
test_list < - list("grp1"/span> = c(subgrp1 = "A"/span>。 subgrp2 = "B"),
"grp2" = c(subgrp1 = "A"/span>。 subgrp2 = "B"),
"grp3" = c(subgrp1 =) 運算子">= "A"))
我想把它改成
want_list < - list("grp1 - subgrp1" = c(subgrp1 = "A")。
"grp1 - subgrp2" = c(subgrp2 = "B")。
"grp2 - subgrp1" = c(subgrp1 = "A")。
"grp2 - subgrp2" = c(subgrp2 = "B")。
"grp3" = c(subgrp1 =) 運算子">= "A"))
purrr::flatten(test_list)回傳長度為5的串列,但完全失去了 "grp "的層次結構--這并不奇怪,因為這正是這個函式的意義所在。我希望通過保留那些長度為>1的名字來 "維持 "層次結構。
我想你可以根據上面的層重命名向量中的每個元素......但我不確定當串列的長度不同時,如何以可擴展的方式進行這一操作。
我怎樣才能解決這個問題呢?
uj5u.com熱心網友回復:
我們可能需要通過改變名稱進行一些修改
want_list2 <- do. call(c。 unname(Map(function)。 y) {
lst1 < - lapply(seq_along(x)。 function(i)x[i])
if(length(lst1) >。 1)
setNames(/span>lst1, paste0(y, ' - '。 names(x))) else setNames(lst1, y)
},test_list。 names(test_list))))
-用預期輸出進行檢查
> all.equal(want_list, want_list2)
[1] TRUE
或者使用flatten和tidyverse選項
library(dplyr)
library(purrr)
library(stringr)
want_list3 <- imap(test_list, ~
map(as.list(seq_along(. x)), function(i) . x[i] %>% .
set_names(if(length(. x) > 1) str_c(. y, ' - ', names(. x)) else.
.y))%>%
扁平化
-測驗
> all.equal(want_list, /span> want_list3)
[1] TRUE
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/308571.html
標籤:
