如何在R中获得第k个对角线?怎么样"对面"对角线?

时间:2015-06-03 21:58:53

标签: r matrix

假设我有一个方阵:

x<-matrix(sample(36),ncol=6)

MATLAB中,diag函数有一个方便的参数k,用于获取&#34;非中心&#34; x的对角线。在R

中执行此操作的最简单方法是什么?

其次,如何做同样的事情来获得&#34; up-right&#34;而不是标准&#34;左下&#34;对角线?

1 个答案:

答案 0 :(得分:3)

mat = matrix(c(1:25), nrow = 5, ncol = 5, byrow = TRUE)
mat
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15
[4,]   16   17   18   19   20
[5,]   21   22   23   24   25

# Diagonal
mat[row(mat) == col(mat)]
[1]  1  7 13 19 25

# "Lower" diagonals
mat[row(mat) == col(mat)+1]
[1]  6 12 18 24
> mat[row(mat) == col(mat)+2]
[1] 11 17 23

# "Upper" diagonals
mat[row(mat) == col(mat)-1]
[1]  2  8 14 20
mat[row(mat) == col(mat)-2]
[1]  3  9 15

...但是@BenBolker的答案(当然)更优雅。

看起来Ben删除了他的答案,所以我在这里稍作修改。假设k是主对角线上方的位数,则:

mat[col(mat) - row(mat) == k]
如果k为正数,

将为您提供主对角线上方的k对角线,如果k为负数,则会在下方为{

}。

Per @ MichaelChirico的评论,以获得&#34;正确的&#34;对角线:

mat[row(mat) + col(mat) == m]

其中2 <= m <= 2 * nrow(mat)。