我有一个很大的 nxn 矩阵,想取出不同大小的非对角线切片。例如:
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
我想要一个 R 函数,当给定矩阵和“对角线切片的宽度”时,它将返回一个仅包含这些值的 nxn 矩阵。所以对于上面的矩阵,比如说,3,我会得到:
1 x x x x x
1 2 x x x x
1 2 3 x x x
x 2 3 4 x x
x x 3 4 5 x
x x x 4 5 6
目前我正在使用(原谅我)一个非常慢的 for 循环:
getDiags<-function(ndiags, cormat){
resmat=matrix(ncol=ncol(cormat),nrow=nrow(cormat))
dimnames(resmat)<-dimnames(cormat)
for(j in 1:ndiags){
resmat[row(resmat) == col(resmat) + j] <-
cormat[row(cormat) == col(cormat) + j]
}
return(resmat)
}
我意识到这是解决这个问题的一种非常“非 R”的方式。有没有更好的方法,可能使用 diag 或 lower.tri?