如何在 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))
所以我有这个对角矩阵
> 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))