2016-02-26 226 views
2

我有一個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個不同的協方差矩陣的決定因素?

回答

3

1)施加/陣列重塑成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, ]))