R中矩阵列表的元素中位数

时间:2015-10-15 03:18:54

标签: r matrix

给出一个矩阵列表:

temp <- list(matrix(c(1,8,3,400), 2), 
    matrix(c(5,2,300,14),2), 
    matrix(c(100,200,12,4),2)
)
temp
# [[1]]
#      [,1] [,2]
# [1,]    1    3
# [2,]    8  400
#
# [[2]]
#      [,1] [,2]
# [1,]    5  300
# [2,]    2   14
#
# [[3]]
#      [,1] [,2]
# [1,]  100   12
# [2,]  200    4

我想要矩阵的元素中位数:

     [,1] [,2]
[1,]    5   12
[2,]    8   14

这可以在没有明确的for循环的情况下完成吗?

2 个答案:

答案 0 :(得分:4)

首先,把它放到一个数组中:

library(abind)
a <- do.call(abind, c(temp, list(along=3)))

然后使用apply

apply(a, 1:2, median)
#      [,1] [,2]
# [1,]    5   12
# [2,]    8   14

正如@RichardScriven建议的那样,你也可以在没有abind包的情况下构建a

a <- array(unlist(temp), c(2, 2, 3))
# or
a <- array(unlist(temp), c(dim(temp[[1]]), length(temp)))

答案 1 :(得分:3)

tapply'temp'

之后,另一个选项是unlist
 res <- temp[[1]]
 res[] <- tapply(unlist(temp), rep(seq(length(temp[[1]])),length(temp)), FUN=median)
 res
 #     [,1] [,2]
 #[1,]    5   12
 #[2,]    8   14

将“temp”转换为rowMedianslibrary(matrixStats))后,data.table的其他选项为setDT(temp)

 library(data.table)
 library(matrixStats)
 res[] <-  rowMedians(as.matrix(setDT(temp)))