R言語のデータ構造
データ構造
一般にプログラミング言語には,整数型,実数型,文字列型などデータの型が存在します. データの型を調べるにはtypeof関数を使用します. プロンプトで下記のように入力してみましょう.
> typeof(10)
[1] "double"
> typeof("a")
[1] "character"
すると,10 は double型であることが分かります. このdouble型は実数であることを表しています. 同様に,a は character型であることが分かります. このcharacter型は文字(もしくは文字列)であることを表しています. これらのデータ型は自動的に設定されるため,普段は特に意識する必要はありません.
R言語では,これらの基本的なデータ型に加えて,数値処理に適したベクトル,行列,データフレーム といった構造が存在します. これらは,基本的に複数の値をまとめて処理するときに利用し,他のプログラミング言語における配列と同じような使い方をされます. 今回は,これらデータ構造に注目していきます.
スクリプトの作成
コードを入力し保存するためのスクリプトを作成しましょう. [ファイル]-[新しいスクリプト]をクリックし,Rエディタを表示します. 次に,[ファイル]-[保存]をクリックして,スクリプトを保存します. このとき,ファイル名はchapter2としてください. また,ファイルの保存場所と作業ディレクトリをデスクトップに変更しておきます.
変数
上述した実数や文字列は変数と呼ばれるオブジェクトに記録し,参照することができます. 変数に値を代入するには,<- という演算子を利用します. スクリプトに下記を入力して,スクリプトを読み込み実行してください(実行は「source(“chapter2.R”)」).
x <- 10
y <- 2
z <- x * y
これで,変数x,y,zに,それぞれ値が代入されました. 変数に代入された値を確認するには,プロンプトで下記のように,変数名をそのまま入力します.
> x
[1] 10
> y
[1] 2
> z
[1] 20
x に10, y に2,z に20が代入されていることが確認できます. このように,演算子**<-**の後方に,代入したい値や式を記述します.
ベクトル
ベクトルは複数の値をまとめて記録するために利用します. ベクトルを生成するには c() 関数を用います. 引数には記録したい値を「,」で区切りながら列挙します. スクリプトに下記を入力して,スクリプトを読み込み実行してください.
v <- c(1,3,5,7,9)
これで,vに,5つの値からなるベクトルが代入されました. ベクトルの値を参照するには,下記のように入力します. ここで,[] は 添え字 と呼ばれ,ベクトルに含まれる要素の番号を表します. 配列とは異なり1から始まることに注意が必要です(配列では0から始まるのが一般的). また,[3:5] と表記すると,要素の3番目から5番目の値を意味します.
> v
[1] 1 3 5 7 9
> v[1]
[1] 1
> v[3]
[1] 5
> v[3:5]
[1] 5 7 9
ベクトルの要素数を取得するには,length() 関数を利用します. 先程,作成したベクトルvの要素数を取得してみましょう.
> length(v)
[1] 5
行列
行列は,長さが同じ複数のベクトルを,一つのデータとしてまとめたものです. 行列を生成するにはmatrix() 関数を用います. 引数には,行列の成分となるベクトル,行数,列数 を指定します. スクリプトに下記を入力して,スクリプトを読み込み実行してください.
m <- matrix(c(1,2,3,4,5,6,7,8,9),3,3)
これで,3 × 3の行列が生成されます. それでは,プロンプトで下記のように入力し,行列の値を確認しましょう. 行列の値を参照するには,添え字に,行,列の順で番号を指定します. 例えば,1行1列の値を取得する場合はm[1,1] と表記します. また,1行目を取得する場合はm[1,],1列目を取得する場合は m[,1] と表記します.
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> m[1,1]
[1] 1
> m[1,]
[1] 1 4 7
> m[,2]
[1] 4 5 6
データフレーム
データフレームは,行列とよく似た構造をしていますが,行列とは異なり数値ベクトルや文字列ベクトルなど, 異なるデータ型を一つにまとめることができます. 表計算ソフトで制作する表をR言語で表現したものと理解すると良いかもしれません. まずは,先程作成した,行列mを基に,データフレームを生成します. 行列からデータフレームを生成するには as.data.frame() 関数を用います. スクリプトに下記を入力して,スクリプトを読み込み実行してください.
d <- as.data.frame(m)
それでは,プロンプトで下記のように入力し,データフレームの値を確認しましょう. 行列との違いは何でしょうか.
> d
V1 V2 V3
1 1 4 7
2 2 5 8
3 3 6 9
上記のV1,V2,V3は列名です. データフレームは表のため,行や列に名前を付けることができます(行列でも可能ですが). 列に名前を設定するには,colnames() 関数を利用します. スクリプトに下記を入力して,スクリプトを読み込み実行してください. ここでは,列名として左からA,B,Cと設定しています.
colnames(d) <- c("A","B","C")
プロンプトで下記のように入力し,データフレームの値を確認しましょう.
> d
A B C
1 1 4 7
2 2 5 8
3 3 6 9
課題
RではCSVファイルを読み込んでデータフレームを生成することができます. まずは,Excelで下記のデータで構成されるCSVファイルを制作してください. CSVファイルの名前はmeibo.csv,ファイル種類は「CSVカンマ区切り(*.csv)」とします(UTF-8を選ばないこと).
名前, 読み, 身長, 体重
石野 彩, いしの あや, 163, 45
渥美 佳美, あつみ よしみ, 155, 55
磯貝 明香, いそがい さやか, 165, 51
次に,read.csvを利用してCSVファイルを読み込みます.
meibo <- read.csv("meibo.csv")
最後に,データフレームの値を確認しましょう.
> meibo
名前 読み 身長 体重
1 石野 彩 いしの あや 163 45
2 渥美 佳美 あつみ よしみ 155 55
3 磯貝 明香 いそがい さやか 165 51
ソースはchapter2.Rに記述し,コンソールの出力結果と,chapter2.R を提出すること.