【问题标题】:Copy upper triangle to lower triangle for several matrices in a list将列表中多个矩阵的上三角复制到下三角
【发布时间】:2014-11-27 18:45:10
【问题描述】:

我想将上三角复制到存储在列表中的一堆矩阵的下三角。

创建一个矩阵列表,其中只有上三角填充了数据:

m1<-matrix(1:9, 3, 3);lower.tri(m1);m1[lower.tri(m1)]<- NA; m1
m2<-matrix(9:18, 3, 3);lower.tri(m2);m2[lower.tri(m2)]<- NA; m2
m3<-matrix(18:27, 3, 3);lower.tri(m3);m3[lower.tri(m3)]<- NA; m3
m4<-matrix(27:36, 3, 3);lower.tri(m4);m4[lower.tri(m4)]<- NA; m4

L<-list(m1,m2, m3, m4); L

要将上三角复制到矩阵的下三角,可以使用:

M <- m1
for(i in 1:nrow(M)) {for(j in 1:i) {M[i,j]=M[j,i] }}
M

但是,我想将列表“L”中每个矩阵的上三角复制到下三角

【问题讨论】:

    标签: r list matrix


    【解决方案1】:

    此类任务的典型策略是首先对单个列表元素(此处为单个上三角矩阵)执行您想要的操作,然后使用lapply() 依次应用它到每个列表元素。

    在这种情况下,这是我要使用的:

    f <- function(m) {
        m[lower.tri(m)] <- t(m)[lower.tri(m)]
        m
    }
    
    ## Check that it works on a single list element
    f(L[[1]])
    #      [,1] [,2] [,3]
    # [1,]    1    4    7
    # [2,]    4    5    8
    # [3,]    7    8    9
    
    ## Use lapply() to apply it to each list element
    lapply(L, f)
    # [[1]]
    #      [,1] [,2] [,3]
    # [1,]    1    4    7
    # [2,]    4    5    8
    # [3,]    7    8    9
    # 
    # [[2]]
    #      [,1] [,2] [,3]
    # [1,]    9   12   15
    # [2,]   12   13   16
    # [3,]   15   16   17
    # 
    # [[3]]
    #      [,1] [,2] [,3]
    # [1,]   18   21   24
    # [2,]   21   22   25
    # [3,]   24   25   26
    # 
    # [[4]]
    #      [,1] [,2] [,3]
    # [1,]   27   30   33
    # [2,]   30   31   34
    # [3,]   33   34   35
    

    【讨论】:

    • ...并将下三角复制到上三角:m[upper.tri(m)]
    猜你喜欢
    • 2013-05-02
    • 2017-06-17
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多