将列表列表的维度组合到单独的向量中

drj*_*122 4 merge r list tidyverse

这是我的数据的一个例子.

ll <- list(
  ll1 = list(Mi = 1:4,
       Mj = 10:13,
       dn = "l1"),
  ll2 = list(Mi = 5:8,
             Mj = 14:17,
             dn = "l2"))
> str(ll)
List of 2
 $ ll1:List of 3
  ..$ Mi: int [1:4] 1 2 3 4
  ..$ Mj: int [1:4] 10 11 12 13
  ..$ dn: chr "l1"
 $ ll2:List of 3
  ..$ Mi: int [1:4] 5 6 7 8
  ..$ Mj: int [1:4] 14 15 16 17
  ..$ dn: chr "l2"
Run Code Online (Sandbox Code Playgroud)

我正在尝试将每个Mi,每个Mj和每个dn组合在一起.因此最终结果将是3个向量:1个组合Mi,1个组合Mj,以及1个组合dn.即,Mi的最终结果将是类似的

> c(ll$ll1$Mi,ll$ll2$Mi)
[1] 1 2 3 4 5 6 7 8
Run Code Online (Sandbox Code Playgroud)

Mj和dn的类似最终结果.我想知道如何简单地做到这一点,最好是使用来自tidyverse的东西.列表的数量会有所不同,一般不会是2,这就是为什么我认为c不是一个很好的解决方案.我猜测地图功能可以在这里工作,但我还没有找到解决方案.

avi*_*seR 7

随着pmappurrr.pmap需要的输入列表(在这种情况下,两个列表的列表),并应用c功能ll[[1]][[1]],ll[[2]][[1]]...然后ll[[1]][[2]],ll[[2]][[2]]...等等:

library(purrr)
pmap(ll, c)
Run Code Online (Sandbox Code Playgroud)

输出:

$Mi
ll11 ll12 ll13 ll14 ll21 ll22 ll23 ll24 
   1    2    3    4    5    6    7    8 

$Mj
ll11 ll12 ll13 ll14 ll21 ll22 ll23 ll24 
  10   11   12   13   14   15   16   17 

$dn
 ll1  ll2 
"l1" "l2"
Run Code Online (Sandbox Code Playgroud)

如果我们不想保留矢量名称,我们可以使用以下use.names参数c:

pmap(ll, c, use.names = FALSE)
Run Code Online (Sandbox Code Playgroud)

输出:

$Mi
[1] 1 2 3 4 5 6 7 8

$Mj
[1] 10 11 12 13 14 15 16 17

$dn
[1] "l1" "l2"
Run Code Online (Sandbox Code Playgroud)