我有一个列表,其中每个元素都是一个矩阵。
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],标准偏差为:
sd(c(3, 5, 4))
我的最终矩阵应如下所示:
[,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中实现这一点而不在所有三个矩阵上进行循环?
非常感谢提前。
答案 0 :(得分:4)
最好将array
转换为unlist
list
转换为vector
,将其转换为3D array
并获取{ {1}} sd
apply
答案 1 :(得分:1)
另一种选择是
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