2016-09-06 43 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 

我想計算的每對標準偏差考慮所有三個矩陣。因此,對於細胞[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 

如何在R中可以實現這一點沒有遍歷所有三個矩陣?

非常感謝提前。

回答

3

最好是由荷蘭國際集團unlist將此轉換爲arraylistvector,將其轉換爲3D array並獲得sdapply

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

另一種選擇是

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