以下の用例をすべて R のインタラクティブモードで試しながら読み進めること.このとき, たとえば X <- c(2,5,9) と入力したら次のことをやってみる. 応答として NULL(空値)やエラーメッセージが出ることもあるが,その時には注意深く読んでみること.
> X > class(X) > str(X) > sum(X)
R は Ruby と同じくオブジェクト指向プログラミング言語として設計されていて, すべてのデータや関数(Ruby や Java でいうメソッドと同じもの) はオブジェクトである.
R のオブジェクトが属するデータ型のうち基本的なものは原子(atomic)データ型という. 原子データ型には,NULL, 論理値,実数,複素数,文字列,などがある.以後の用例の中で都度解説する.
関数 c でベクトルを作ることができる. もっとも基本的なデータ構造である. Ruby の配列はこれに近い.ベクトルには同じ型のデータしか含めることができない.
> v <- c(10,20,30) ## 数値(numeric)型データのベクトル > Name <- c("Aki","Emi","Rei") ## 文字列のベクトル > Name <- c(10,20,"Rei") ## この場合,数値は文字列型に変換される
ベクトルを束にして行列(Matrix)を作ることができる.そのためには cbind, rbind関数を使う.
> Age <- c(19,21,17) > Height <- c(160,165,152) > Weight <- c(58,61,49) > A <- cbind() > B <- rbind() > A > B > A[1,] > A[,1] > sum(A[,1]) ## あといろいろ試してみよう.
行列の要素も同じデータ型に揃えられてしまうので注意.
> v <- c(19,23,21) > Name <- c("Aki","Emi","Rei") > cbind(v,Name)
行列は次のようにして生成することができる.仕組みを考えてみよう.
> T1 <- matrix(c(4,3,7,1,2,3,2,8),2) > T2 <- matrix(c(4,3,7,1,2,3,2,8),4) > t(T1) ## 転置行列を作る > T3 <- matrix(c(4,3,7,1,2,3,2,8),3) > ## 次のワザはうまい使いみちがあるかも知れない. > matrix(1:36,4)
ここで次の操作を行ってみよう.ある行列が属している,クラス,モードを知ることができる.
> T1 <- matrix(c(4,3,7,1,2,3,2,8),2) > typeof(T1) # R の内部処理で使われているデータの型 > mode(T1) # ユーザが扱っているデータの型 > class(T1) # クラス
R の行列は数学における行列と同等のデータで,同様の計算が可能になっている. 統計解析の数学的な計算を支えている重要な仕掛けだが,逆に言うとユーザの目には触れないところで働いている.
データフレームは強力なデータ構造で,データを扱うにはこれひとつで間に合うといっても言い過ぎではない.
> Name <- c("Aki","Emi","Ken","Yumi","Jiro","Goro") > Age <- c(19,22,21,18,11,7) > Sex <- c("F","F","M","F","M","M") > DF <- data.frame(Name,Age,Sex) > DF > DF$Name > DF$Age > DF$Sex > DF$Name[Sex == "F"] > DF$Name[Age > 18] > DF$Name[Age > 18,] #注意!
> Name <- c("Aki","Emi","Ken","Yumi","Jiro","Goro") > Age <- c(19,22,21,18,11,7) > Sex <- c("F","F","M","F","M","M") > DF <- data.frame(Name,Age,Sex) > plot(DF$Age) > plot(DF$Sex) # この意味は? > plot(DF$Age ~ DF$Sex) # 箱ひげ図 > plot(DF) # 意味を考えてみよう
この Friends.txt というファイルをカレントディレクトリにダウンロードする。
R または Rgui(Windows) をターミナルで起動して,次のように操作する。
> DF <- read.table("Friends.txt",header=TRUE)
これで DF というデータフレームができているので,上のようにいろいろな操作を行なうことができる。