我有一个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个不同协方差矩阵的这些决定因素?
答案 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, ]))