行列のすべての対角線を取得する方法を理解しようとしています。 は、例えば、私は、次の行列を持っていると言う: < - マトリックス(1:16,4)diag(A)
関数を用い行列からすべての対角ベクトルを取得する
私はたい、主要対角線に加え
[1] 1 6 11 16
が返されその上下のすべての対角線のリスト
5 10 15
2 7 12
9 14
3 8
4
13
私は、しかし、私は任意のサイズの行列のためにそれらの残りの部分を取得するためにコードを拡張する方法を見つけ出すように見えることはできません、私に直接プライマリー1以上と以下の対角線を与える次のリンクhttps://stackoverflow.com/a/13049722を発見しました。私は2つのネストされたforループを試しました。なぜなら、いくつかの種類の行列添え字が、私が探している結果を生成するように見えるからです。 forループでncol(A)、nrow(A)を使ってみましたが、正しい組み合わせを見つけることができませんでした。
2本の対角線を返さdiag(A[-4,-1])
diag(A[-1,-4])
、もちろん
上下両方これは正方形である:プラス私は、ループは、一般的にR.
に眉をひそめているために与えられたコードがあったことを認識していますこれを実行したい行列のすべてが正方形ではないことに注意してください。必要であれば、非正方形領域にNAsを充填することも許容される。私が必要とする回答は、ページ上の他の回答の1つにあるかもしれませんが、元の質問には手段、合計などが含まれています。私はこれに対する解決策がばかげて簡単だと感じていますが、それは私には起こりません。私はまた、私はどこでもこの質問を見つけることができなかったことに驚いています、それは十分な共通の質問であるようです。たぶん私はこの問題の適切な用語を知らないかもしれません。
なぜ@ GavinSimpsonの答えはありませんか? – A5C1D2H2I1M1N2O1R2T1
私はこの答えも読んだので、解決策は行と列の数に基づいてインクリメントすることを理解していますが、これを1つの行列のすべての対角線を返す関数としてパッケージ化する方法は、私はすべての答えを繰り返し読んだ。 – Beaker
サイドノート: 'for 'ループはぼやけていません。それは神話です(IMO)。それらはすべてソースコードの上にあります。他の機能と同様に、適切に使用する必要があります。 :-) –