【发布时间】:2017-11-02 18:47:47
【问题描述】:
我有一个包含 20 行的数据框,其中每一行是一个 10 x 10 对角线的上三角协方差矩阵,我想将其转换为一个对称的 10X10 矩阵。我一直在关注这个帖子:a vector to an upper Triangle matrix by row in R 但是当我这样做时,它会给我一个列表而不是矩阵。
我还想对每一行进行递归处理,并将生成的 20 个矩阵存储在一个列表中。对于可重现的示例,这里是一个有 20 行的数据框。每行是对角线的 3x3 上三角矩阵。
g <- data.frame(a=runif(20),b=runif(20),c=runif(20),d=runif(20),e=runif(20),f=runif(20))
g1<-c(g[1,])
g2= matrix(0, 3, 3)
g2[upper.tri(g2, diag=TRUE)]=g1
g2
# list of 9 elements instead of matrix
#[[1]]
# [1] 0.2625916
# [[2]]
# [1] 0
# [[3]]
# [1] 0
# [[4]]
# [1] 0.6255627
# [[5]]
# [1] 0.829801
# [[6]]
# [1] 0
# [[7]]
# [1] 0.3386346
# [[8]]
#[1] 0.9517039
# [[9]]
# [1] 0.5886387
【问题讨论】:
-
不要递归地做,这是一个特定的编程术语,你可能想在一个循环中做它?