2016-09-06 6 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]에 대한 표준 편차는 다음과 같습니다 세 행렬을 통해 루프없이 내가 R에이를 수있는 방법

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

을 :

sd(c(3, 5, 4)) 

내 최종 매트릭스는 다음과 같이한다 ?

미리 감사드립니다.

답변

3

그것의 listvector에 보내고 unlist에 의해 array이 변환 3 차원 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 
입니다