交错存储在R中的列表中的矩阵行

Dat*_*'oh 4 r list matrix

我想从矩阵列表中创建交错矩阵.

输入示例:

> l <- list(a=matrix(1:4,2),b=matrix(5:8,2))
> l
$a
     [,1] [,2]
[1,]    1    3
[2,]    2    4

$b
     [,1] [,2]
[1,]    5    7
[2,]    6    8
Run Code Online (Sandbox Code Playgroud)

预期产量:

1    3
5    7
2    4
6    8
Run Code Online (Sandbox Code Playgroud)

我已经检查了gdata中的interleave函数,但它没有显示列表的这种行为.任何帮助赞赏.

flo*_*del 5

这是一个单行:

do.call(rbind, l)[order(sequence(sapply(l, nrow))), ]
#      [,1] [,2]
# [1,]    1    3
# [2,]    5    7
# [3,]    2    4
# [4,]    6    8
Run Code Online (Sandbox Code Playgroud)

为了帮助理解,首先将矩阵堆叠在一起do.call(rbind, l),然后以正确的顺序提取行:

sequence(sapply(l, nrow))
# a1 a2 b1 b2 
#  1  2  1  2 

order(sequence(sapply(l, nrow)))
# [1] 1 3 2 4
Run Code Online (Sandbox Code Playgroud)

它可以与任意数量的矩阵一起使用,即使它们没有相同的行数,它也会做"正确的事"(主观的).