我想从矩阵列表中创建交错矩阵.
输入示例:
> 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函数,但它没有显示列表的这种行为.任何帮助赞赏.
这是一个单行:
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)
它可以与任意数量的矩阵一起使用,即使它们没有相同的行数,它也会做"正确的事"(主观的).
| 归档时间: |
|
| 查看次数: |
715 次 |
| 最近记录: |