2014-10-02 148 views
6

我想將上三角形複製到存儲在列表中的一堆矩陣的下三角形中。將上三角形複製到列表中幾個矩陣的下三角形

只有充滿了數據上的三角形創建矩陣列表:

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」

回答

13

這樣的任務的典型策略是首先處理一個函數,你想要一個單一的列表元素(這裏是一個單一的上三角矩陣),然後使用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 
+1

......並下三角複製到上三角:M [upper.tri(M)< - T(M)[ upper.tri(米)] – 2014-12-17 17:53:53