10

マトリックスから事前に指定された要素の束を一度に選択する方法はありますか? 具体的には、次のマトリックスがあるとします。

      58        59        60       62        63        64
58  0.000000  3.772139  6.367721 8.978718 12.197210 13.401126
59  3.772139  0.000000  3.755554 5.935946  9.592700 11.664533
60  6.367721  3.755554  0.000000 5.999409  9.324764 11.991269
62  8.978718  5.935946  5.999409 0.000000  3.810169  6.762802
63 12.197210  9.592700  9.324764 3.810169  0.000000  3.796884
64 13.401126 11.664533 11.991269 6.762802  3.796884  0.000000

セル [1,2]、[2,3]、[3,4]、[4,5]、[5,6] を選択したい。インデックスでそれらを参照できることに気づきました。この場合、次を実行できます。

mymatrix[c(2,9,16,23,30)]

ただし、後でコードを読むと、これはあまり明確ではありません。実際の (行、列) 参照を一度に入力する方法はありますか?

4

3 に答える 3

17

索引付けは、2 列の行列で行うことができます。これらの行番号と列番号を (Matlab スタイルの式ではなく) 有効な R オブジェクトに変換した後:

> idxs <- gsub("\\]",")", gsub("\\[", "c(",  "[1,2], [2,3], [3,4], [4,5] ,[5,6]") )
# I edited the string value that idxs returned:
> midx <- rbind( c(1,2), c(2,3), c(3,4), c(4,5) ,c(5,6) )
> mat <-  matrix(scan(), nrow=6)  
1:  0.000000  3.772139  6.367721 8.978718 12.197210 13.401126
7:   3.772139  0.000000  3.755554 5.935946  9.592700 11.664533
13:   6.367721  3.755554  0.000000 5.999409  9.324764 11.991269
19:   8.978718  5.935946  5.999409 0.000000  3.810169  6.762802
25:  12.197210  9.592700  9.324764 3.810169  0.000000  3.796884
31:  13.401126 11.664533 11.991269 6.762802  3.796884  0.000000
37: 
Read 36 items
> mat[midx]
[1] 3.772139 3.755554 5.999409 3.810169 3.796884

あなたの目標が、より一般的に達成できる超対角線のインデックス付けである場合:

> mat[col(mat)==row(mat)+1]
[1] 3.772139 3.755554 5.999409 3.810169 3.796884
于 2012-08-16T19:14:48.700 に答える
9

特定の状況に対する解決策は、サブマトリックスを選択してdiag関数を使用することです。

R> diag(x[-ncol(x),-1])
[1] 3.772139 3.755554 5.999409 3.810169 3.796884
于 2012-08-16T19:10:38.393 に答える