2016-09-06 15 views
2

各要素が行列であるリストがあります。行列のリストに対する標準偏差R

set.seed(123) 

m1 <- matrix(sample(c(1:10), size = 9, replace = TRUE), ncol = 3, nrow = 3) 
m2 <- matrix(sample(c(1:10), size = 9, replace = TRUE), ncol = 3, nrow = 3) 
m3 <- matrix(sample(c(1:10), size = 9, replace = TRUE), ncol = 3, nrow = 3) 

m <- list(m1, m2, m3) 
m 
[[1]] 
     [,1] [,2] [,3] 
[1,] 3 9 6 
[2,] 8 10 9 
[3,] 5 1 6 

[[2]] 
    [,1] [,2] [,3] 
[1,] 5 7 9 
[2,] 10 6 3 
[3,] 5 2 1 

[[3]] 
    [,1] [,2] [,3] 
[1,] 4 7 7 
[2,] 10 7 8 
[3,] 9 10 6 

は、私はすべての3つの行列を考慮し各ペアの標準偏差を計算します。だから、セルのために[1,1]の標準偏差は次のようになります。

私の最後の行列は次のようになります。

 [,1] [,2] [,3] 
[1,] 1.00 1.15 1.53 
[2,] 1.15 2.08 3.21 
[3,] 2.31 4.93 2.89 

どのように私はすべての3つの行列をループせずにRでこれを達成することができます?

事前に感謝します。

答えて

3

それは、listvectorにINGのunlistによってarrayにこれを変換する3D arrayに変換して取得することをお勧めしsd

round(apply(array(unlist(m), c(3, 3, 3)), c(1,2), sd),2) 
# [,1] [,2] [,3] 
#[1,] 1.00 1.15 1.53 
#[2,] 1.15 2.08 3.21 
#[3,] 2.31 4.93 2.89 
0

applyで別のオプションは、

matrix(apply(sapply(1:9, function(x) unlist(m)[seq(x, length(unlist(m)), 9)]), 2, sd), 
                       ncol = 3) 

#  [,1]  [,2]  [,3] 
#[1,] 1.000000 1.154701 1.527525 
#[2,] 1.154701 2.081666 3.214550 
#[3,] 2.309401 4.932883 2.886751 
です