が、これは間違っている理由として重要な洞察力が働いていないが?'['
に与えられる:
[
によってi
ができる単一の引数を配列のインデックスを作成しますx
の次元と同じ数の列を持つ行列。結果は、i
の各行のインデックスのセットに対応する要素を持つベクトルになります。
下付き文字の範囲外のエラーが発生したときは明らかです。 data
には50行と100列がありません。
2番目の例では、索引付けされている行列よりも多くの列が次元を持ち、から要素c(1:100, 1:100)
を抽出しているため、索引付け行列はベクトルとして処理されています。 cbind(idx, idx)
は、具体的
m[c(idx[,1], idx[,2], idx[,1], idx[,2])]
又は同じである
> m[cbind(idx,idx)]
[1] 1 11 21 31 41 51 61 71 81 91 2 12 22 32 42 52 62 72
[19] 82 92 3 13 23 33 43 53 63 73 83 93 4 14 24 34 44 54
[37] 64 74 84 94 5 15 25 35 45 55 65 75 85 95 6 16 26 36
[55] 46 56 66 76 86 96 7 17 27 37 47 57 67 77 87 97 8 18
[73] 28 38 48 58 68 78 88 98 9 19 29 39 49 59 69 79 89 99
[91] 10 20 30 40 50 60 70 80 90 100 1 11 21 31 41 51 61 71
[109] 81 91 2 12 22 32 42 52 62 72 82 92 3 13 23 33 43 53
[127] 63 73 83 93 4 14 24 34 44 54 64 74 84 94 5 15 25 35
[145] 45 55 65 75 85 95 6 16 26 36 46 56 66 76 86 96 7 17
[163] 27 37 47 57 67 77 87 97 8 18 28 38 48 58 68 78 88 98
[181] 9 19 29 39 49 59 69 79 89 99 10 20 30 40 50 60 70 80
[199] 90 100
を与えると
これはより容易に、
m <- matrix(1:100, ncol = 10, byrow = TRUE)
とインデックスで参照される
m[c(1:50, 51:100, 1:50, 51:100)]
まあ、 'data'は10行10列です。 'idx'の値は100までです。たとえば、' idx'の最初の行は '1 51'で、これは第1行と第51列を示します。 'data'は10列しか持たないので、51列目は実際には範囲外です。代わりに、(a) 'idx = cbind(1:5、6:10)'または(b) 'data = matrix(rbinom(100^2、1. 0.5)、nrow = 100)働くでしょう。 – Gregor
'idx'自体は完全な行列を指し、1から100までの数字を含みます。' data'は10行10列なので、1から10までの添え字はエラーにならないでしょう。しかし、10を超える数字を参照するとすぐに、添え字が範囲外のエラーになります。 'data [idx [2,2]]' –