我正在尝试找出如何获取矩阵的所有对角线。例如,假设我有以下矩阵:
A <- matrix(1:16,4)
使用diag(A)
函数将返回:
[1] 1 6 11 16
除了主对角线,我希望得到所有在它上面和下面的对角线的列表。
除了主对角线,我希望得到所有在它上面和下面的对角线的列表。
5 10 15
2 7 12
9 14
3 8
4
13
我找到了以下链接https://dev59.com/NGcs5IYBdhLWcg3wMxJF#13049722,它给出了主对角线上方和下方的直接对角线,但是我似乎无法想出如何扩展代码以获取任意大小矩阵的其余对角线。我尝试了两个嵌套的for循环,因为看起来某种矩阵下标的递增会产生我要寻找的结果。我在for循环中尝试使用ncol(A),nrow(A),但是似乎无法找到正确的组合。此外,我知道在R中,for循环通常不被认可。
给出的代码是:
diag(A[-4,-1])
diag(A[-1,-4])
返回了两个对角线,上下对角线都返回。
当然,这是一个方阵,并不是我想要执行此操作的所有矩阵都是方阵。如果必要的话,在非方形区域填充NA将是可接受的。我需要的答案可能在页面上的其他答案中,但原始问题涉及平均数、总和等,这增加了一层超出我所尝试做的事情的复杂性。我感觉解决这个问题会非常简单,但它没有发生在我脑海中。我也很惊讶我找不到任何关于这个问题的问答,它似乎是一个足够常见的问题。也许我不知道这个问题的正确术语。
for
循环并不被视为不好的东西。我认为这是一个谬论。在源代码中到处都有它们。只需要像其他函数一样适当地使用它们即可 :-) - Rich Scriven