将矩阵划分为子组矩阵

时间:2016-02-26 20:26:48

标签: r matrix

我有一个240×2矩阵,我的目标是将它分成40组6×2矩阵,并确定所有协方差矩阵的决定因素。我用这段代码完成了任务。

  mat=matrix(0,240,2)
  m=numeric()
  n=0
  for ( i in 1:40) {
      m[i]=det(cov(mat[(n+1):(n+6),]))
      n=n+6
  }

是否有更好的方法来获得协方差矩阵和40个不同协方差矩阵的这些决定因素?

1 个答案:

答案 0 :(得分:3)

1)apply / array 重塑为3维数组并使用apply

apply(array(mat, c(6, 40, 2)), 2, function(x) det(cov(x)))

2)rollapply

library(zoo)
rollapply(mat, 6, by = 6, function(x) det(cov(x)), by.column = FALSE)

3)tapply

tapply(1:240, gl(40, 6), function(ix) det(cov(mat[ix, ])))

4)sapply

sapply(seq(1, 240, 6), function(i) det(cov(mat[i + 0:5, ])))

5)

m <- numeric(40)
for(i in seq(1, 240, 6)) m[i] <- det(cov(mat[i + 0:5, ]))