データサイエンスのためのR速習 ~入門から機械学習まで~ 第2話
この記事のタイトルとURLをコピーする

前回はRの数値計算とベクトルについて勉強した。

ベクトルはデータを1次元で保存するものだったのに対し、今回見ていく行列 (matrix) はデータを2次元で格納する。ベクトルと同じく、行列も保存できるのは同じデータタイプに限られる (違うタイプのものを格納するリスト形式は、第4話で紹介する)。

行列

行列の定義

行列はmatrix()関数にベクトルを渡すことで作成できる。行の数はnrow引数で指定する。

v <- 1:6
matrix (v)
matrix (v, nrow=2)

埋めていく順番はbyrow引数にTRUEを渡すことで変更できる

matrix (v, nrow=2, byrow=TRUE)

ベクトル同士を結合し、それをmatrix関数に渡せば行列ができる。例えばGoogleとAppleの仮想的な株価をベクトルにそれぞれ格納し、それらを合わせてstocksというベクトルを作る。そのベクトルは1次元だが、これを2次元の行列にしてみる。

goog <- c(150,160,170,180,190)
apple <- c(200,190,180,170,160)
stocks <- c(google, apple)
stocks.matrix <- matrix (stocks, byrow=TRUE, nrow=2)

行列になっているかis.matrix ()関数で確認できる。行列ならTRUEとなる

is.matrix (stocks.matrix)

行と列に名前をつける

行列に名前をつけるには、ベクトルのnames ()関数の行列版であるcolnames () 関数とrownames ()関数に名前をベクトル形式で指定する。rownames () を使うと、行 (row) に名前をつけることができる。

company.names <- c('Google', 'Apple')
rownames (stocks.matrix) <- company.names
stocks.matrix


同様に、列 (column) に名前をつけるにはcolnames () 関数を使う。

days <- c('Mon', 'Tue', 'Wed', 'Thu', 'Fri')
colnames (stocks.matrix) <- days
stocks.matrix

行列の計算

行列と数の四則演算

行列と数の四則演算は、行列のそれぞれの要素に数が作用する。例えば行列 + 1は、行列の全ての要素に1を加えることになる。

mat <- matrix (1:50, byrow=TRUE, nrow=5) 
4*mat # 全要素を4倍 
1/mat 
mat^2 # 全要素を2乗 
mat >12 # 全要素について12との代償を調べる (12より大きいとTRUEになる)

行列同士の四則演算

行列同士の演算は要素ごとになる。

mat + mat
mat^mat
mat2 <- matrix (1:9, nrow=3)
mat2*mat2

内積の計算なら*の両脇を%で囲み%*%とする。

mat2 %*% mat2

行/列の合計や平均

列ごとの合計はcolSums ()関数、列ごとの合計はrowSums () 関数で取得可能。

colSums(stocks.matrix)
rowSums (stocks.matrix)

平均はcolMeans () 関数やrowMeans ()関数で。

colMeans (stocks.matrix)
rowMeans (stocks.matrix)

行列の操作

行列の結合

行列を行 (row) 方向, つまり縦方向につなげるにはrbind ()関数、列 (column) 方向、つまり横方向につなげるにはcbind () 関数を使う。

FB <- c (80,85,90,95,100)
tech.stocks <- rbind (stocks.matrix, FB) # 列方向につなげた
tech.stocks
avg <- rowMeans (tech.stocks) # 行方向ごと、つまり会社ごとに平均をとる
avg
tech.stocks <- cbind (tech.stocks, avg) # 列方向に結合
tech.stocks

行列の選択

行の選択、列の選択は[行番号, 列番号] とする。指定しないと全ての意味になる。

mat[1,] # 1行目, 全ての列
mat[,1] # 全ての行, 1列列

連続した範囲を意味する:記号も使うことができる

mat[1:3,] # 1から3行目, 全ての列
mat[1:2, 1:3] # 1から2行目,  1から3列目
mat[c(1,3), c(5,9,10)] # 1と3行目,  5と9と10列目

第3話について

というわけで第2話は行列について駆け足で解説した。次回はその応用になるデータフレーム形式について見ていく。

この記事のタイトルとURLをコピーする
生命医学の知識や進歩を無料のニュースレターで

がんをはじめとする病気やよくある症状などの医学知識、再生医療などの生命科学研究は、研究手法が大きく前進したこととコンピューターの発達なども相まって、かつてないほどの勢いで知識の整備が進んでいます。

生命医学をハックするでは、主として医師や医学生命科学研究者ではない方や、未来を担う学生さんに向けた情報発信をしています (より専門的な内容はnoteで発信中)。

月に1回のペースで、サイトの更新情報や、それらをまとめた解説記事をニュースレターとして発行しています。メールアドレスの登録は無料で、もちろんいつでも解除することができます。

サイト名の「ハックする」には、分かってきたことを駆使し、それを応用して、病気の治療や研究などにさらに活用していこうという意味があります。

生命医学について徐々に解き明かされてきた人類の英知を受け取ってみませんか?

こちらの記事もいかがですか?
ブログランキング参加中 (クリックしていただけると励みになります)