如何在 R 中做这个矩阵"operation"?

How to do this matrix"operation" in R?

所以我有这个对角矩阵

> M
   a  b  c  d
 a 2  3  5  4
 b .  3  6  4
 c .  .  4  6
 d .  .  .  3
 > 

我想做的是以下内容,我想访问以下元素: (a,a), (a,b), (a,c), (a,d)。那很容易,它只是第一行。

但我也需要

(b,a), (b,b), (b,c), (b,d)。将是 (3,3,6,4)

(c,a), (c,b), (c,c), (c,d)。将是 (5,6,4,6)

(d,a), (d,b), (d,c), (d,d)。将是 (4,4,6,3)

我怎样才能访问那些?在每种情况下,我都想 return 一个带有这些元素的行或列向量。 我在这里尝试的是手动复制这些元素,但我真的很想知道如何在更大的矩阵的情况下做到这一点?

如果你想要行向量

asplit(M,1)

或列向量

asplit(M,2)

矢量存储在列表中的位置。


更新

M[lower.tri(M)] <- t(M)[lower.tri(M)]
res <- asplit(M,1)

这样

> res
[[1]]
[1] 2 3 5 4

[[2]]
[1] 3 3 6 4

[[3]]
[1] 5 6 4 6

[[4]]
[1] 4 4 6 3

数据

> dput(M)
structure(c(2, NA, NA, NA, 3, 3, NA, NA, 5, 6, 4, NA, 4, 4, 6, 
3), .Dim = c(4L, 4L))