3.3 行列

Rにはmatrixという型のオブジェクトがあり,数学的な行列を容易に扱うことができる. matrix型のオブジェクトの要素は文字列でも良いが,全ての要素が同じ型である必要がある.

3.3.1 行列の生成

行列はmatrix()という関数によって生成することができる.この関数にベクトルとサイズの情報を渡すことで, 任意の行列を生成できる.行列のサイズや要素数が合っていない場合は警告又はエラーが表示される.

全ての要素をベクトルで指定する際は次のようにする.

# 引数の指定でコードが長くなるときは,()の中で改行することも可能
matrix(
    c(5, 2, 9, 2, 10, 11, 19, 21, 3, 3, 12, 31),
    nrow = 4,
    ncol = 3
)
##      [,1] [,2] [,3]
## [1,]    5   10    3
## [2,]    2   11    3
## [3,]    9   19   12
## [4,]    2   21   31

例えば,1から12の要素を順番に並べた\(3\times4\)の行列を作成したい場合は次のようにすれば良い.

matrix(1:12, nrow=3, ncol=4)
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12

デフォルトでは,縦方向に並ぶように要素が配置されていくが,byrow=TRUEとすることで横方向に並ぶように変更することもできる.

matrix(1:12, nrow=3, ncol=4, byrow=TRUE)
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12

ここでnrow=3は3行,ncol=4は4列というサイズの指定をしている. ベクトルではなく数値を指定した場合は全ての要素が指定した数値になる.

matrix(-99, nrow=5, ncol=5)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]  -99  -99  -99  -99  -99
## [2,]  -99  -99  -99  -99  -99
## [3,]  -99  -99  -99  -99  -99
## [4,]  -99  -99  -99  -99  -99
## [5,]  -99  -99  -99  -99  -99

Exercise 3.3 (行列の生成) 以下の問題に答えよ.

  1. 1行目の要素が\((5, 2)\),2行目の要素が\((9, 7)\)であるような行列を生成せよ.
  2. 1から20の整数を要素に持つサイズが\(5\times4\)の行列を生成せよ.
  3. 全ての要素が-1であるようなサイズが\(3\times3\)の行列を生成せよ.