こんにちは、ミントです
前回は、Rで行列の計算をやりました
行列の前にやったベクトルは、その要素が行または列番号として指定される「 1次元 」のデータ構造でした
行列は、その要素が行と列番号で指定される「 2次元 」のデータ構造でした
1次元(ベクトル) → 2次元(行列)
とくると、今度は3次元かな?って思いますよね
そのとおりです!
今回は、3次元以上のデータも表現できる「 配列(アレイ array) 」をやりたいと思います
3次元以上のデータも扱えるということで、配列は、1次元、2次元も扱えます
本記事の概要 [表示]
Rで配列(アレイ array)をつくってみる
Rで配列をつくるには、「 array ( ) 関数 」を使います
array ( 配列に入れたいデータ, データの次元) という形で指定します
1次元の配列をつくってみる
1から12の整数値を、arr1 というオブジェクトに代入しています
このとき、dim = c(12) として、1次元を指定しています
ん?12と指定したから、12次元じゃないの?
って思うかもしれませんが、そうではないんです
dim = c(12) では、dim の要素数が次元に対応します
c(12)は、つまり12という数値が1つなので、1次元なのです
1次元で、1つの次元に12個データが入りますよ~という意味になります
この点は、1次元ではわかりにくいので、2次元をみてみましょう
2次元の配列をつくってみる
こんどは、次元 dim = c ( 2, 6 ) と指定しました
すると、ピンク色の結果を見ると、2行6列の行列(2次元)データとして代入されていることがわかります
1次元のところで書いたように、dim = c ( 2, 6 ) は2つの数値2,6をもっています。この配列は2次元で、それぞれの次元には、2個、6個の数値をもつことができる、という意味になっています
次元の感覚はつかめましたでしょうか?
ほかの例をもあげてみますので、感覚をつかんでくださいね
こちらも2次元で、それぞれの次元に3個と4個のデータをもつように指定しました
結果は、3行4列の行列になっていますね
つぎの例では6行2列の行列をつくっています
いかがでしょうか?これで2次元の配列はつかめたんではないでしょうか
3次元の配列をつくる
3次元配列は、次元dim に3つの数値を指定すれば作れます
次元を dim = c ( 2, 2, 3 ) と3個の数値を指定したので、3次元となり、それぞれの次元に、2個、2個、3個のデータを含んでいます
ピンク色の結果表示をみると、2行2列の行列が3個できていることがわかります
ほかの例も示しておきますね
1行4列の行列が3個ある配列ができました。要素数4のベクトルが3つできた、とみることもできますね
この例では、2行3列の行列が2つできています
3次元配列の感覚もつかめてきたのではないでしょうか
ここでちょっと疑問をもった方もおられるのではないでしょうか
上の例では、データ数が12個で、各次元のデータの個数が12個をうまく格納できる個数になってます
- 12 = 2 × 2 × 3
- 12 = 1 × 4 × 3
- 12 = 2 × 3 × 2
という感じになってます
じゃあたとえば、 次元を 2 × 5 × 2 = 20 のように、全データ数の12個に合わないように指定したらどうなるでしょうか?
データの個数と次元の指定の関係
配列に入れたかった12個の数値は、2番目の行列の1列目までにすべて含まれています
そのあと、2番目の行列の2列目からは、また1,2,3・・・と12個のデータが最初から繰り返して代入されています!
本来指定した1から12の整数だけでなく、再び1から配列の要素がうまるまで、繰り返して使われています。そして特にエラーの表示などはありません
つまり、Rで配列を生成させるときは、データ数と次元に注意!気づかないまま使っていると、その後の計算で思わぬエラーを起こしてしまうかもしれないからです
じつは以前ベクトルでも同じ現象がありました
Rは、足りない値を自動的に満たしてくれるので、親切と言えるかもしれませんが、間違ったまま気づかないで計算を進めてしまうリスクもあります
このことは頭の片隅においておくといいかなぁと思います
というわけは、今回「 配列 」は、ベクトルや行列を含んだデータ構造であることが分かりました
Rにおいては、データは基本的に「 1次元のベクトル 」で表現されています。それに「 次元 」という指定をつけることで、2次元の行列だったり3次元以上の配列などを作ることができるわけです
そのときには、データ数と各次元の要素数に気をつけましょうね!ということもやりました
というわけで、今回はRで配列(アレイ)を作ってみました
Rには、「データフレーム」というデータ構造があります↓
こちら無料で読めます↓