R中多个维度的诊断功能

Diag function om multiple dimensions in R

我想对向量列表使用 diag() 函数,以便获得矩阵列表,其中对角线是我的列表的向量。

更具体地说,假设我有一个名为 list 的列表,其中包含 100 个向量,每个向量有 14 个值。

>dim(list)
100 14

我想创建一个包含 100 个大小为 14x14 的矩阵的数组 array,其中矩阵 diag2vec(array[i,,]) 的对角线是我的向量 list[i,](矩阵中的所有其他值0)。

所以我最终会得到:

>dim(array)
100 14 14

我尝试使用 diag() 函数,但我无法让它按行工作。

(M <- matrix(1:6, nrow = 2))
#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6
sapply(1:nrow(M), function(i) diag(M[i, ]), simplify = "array")
# , , 1
# 
#      [,1] [,2] [,3]
# [1,]    1    0    0
# [2,]    0    3    0
# [3,]    0    0    5
# 
# , , 2
# 
#      [,1] [,2] [,3]
# [1,]    2    0    0
# [2,]    0    4    0
# [3,]    0    0    6

此外,请注意 M 是一个矩阵,而不是列表,dim 应用于最后一个对象 returns 3 3 2,这才是你真正想要的我想,而不是像你的例子中那样 2 3 3

第一次尝试太快了。

使用library(abind)

library(abind)
abind(lapply(x, diag), along = 0)

其中 x 假定为您的向量列表

假设您的数据如下所示:

z <- replicate(100, runif(14), simplify=FALSE)

尝试:

z2 <- aperm(vapply(z, diag, diag(14)), 3:1) 

其中有:

> dim(z2)
[1] 100  14  14