プログラミング言語としてのR

プログラミング言語としてのR
情報知能学科
白井 英俊
初めに
• この文書は、完全を目指していない
• 書いてあることは不完全で、ひょっとしたら間違いが
あるかもしれない
• 必ず試し、分からなければ調べよ
この文書は、高階(2008)「プログラミングR」オーム社、
に基づく
• Rはウェブ上に豊富な資料がある。ウェブを有効利
用せよ
• Rはhelpが充実している。そのために英語に慣れよ
う!
変数とオブジェクト
• Rの変数は、Rubyと同様、「どんなオブジェクトでも
格納できる箱のようなもの」
例: 変数名 <- オブジェクト
• 変数には型の宣言が不要。オブジェクト自体が型を
持っている(Rubyと同じ)
• オブジェクトの型を『クラス』という。クラスを調べるに
は、
例: class(オブジェクト)
オブジェクトに属性を追加できる:
例: attr(オブジェクト名, 属性名) <- 属性値
実行文
• 代入文のように何かを『計算・実行する』文は、
値を持つ
• 文は一行に一つ、もしくは;で区切って一行に
複数の文が書ける(Rubyと同じ)
• 一つの文は複数行にまたがってもよい
• {と}で複数の文をまとめたものを「ブロック」と
いう。一つのブロックは、一つの文相当となる。
関数
• 関数はfunctionを使う。基本的に、関数には
名前がない。
• 関数を変数に代入すると、その変数が「関数
名」として働く。
例: fact <- function(x) {
if (x > 1) { return(x * fact(x-1)) }
else { return(1) } }
> fact(10)
データ型と型変換
• Rの基本的な型
数値型 numeric (基本的に数はすべてこれ)
論理型 logical: TRUE/FALSE
欠損値: NA (Not Applicable)
文字型 character: 文字列の前後を"で囲む
因子型 factor: 作成するには関数factorを用いる
複素数型 complex: x+yi
• 型の変換
as.numeric, as.character, as.logical, as.complex
データの集合
•
集合的なデータ構造は5種類
ベクトル: 同じ型のデータの1次元の集まり
例: x <- c(1,2,3)
行列: 同じ型のデータの2次元の集まり
例: y <- matrix(0, nrow=3, ncol=3)
配列: 同じ型のデータの3次元以上の集まり
例: z <- array(1:18, dim=c(3,3,2))
リスト: 異なる型のデータの1次元の集まり
例: w <- list("sentence", list("subj"), list("v", list("obj")))
データフレーム:任意型のベクトルの表形式の集まり。データ分
析の関数が用いる
集合データの要素の参照方法
• 集合データの要素の参照方法
(1) 単純参照: 要素番号を指定して、個別の
要素を取り出す。例: x[2], y[1,3]
(2) 行列名による参照
ベクトルの場合 names、行列の場合、rownames,
colnamesで行列名を与え、y[“col01”,”row01”]で要
素が取り出せる
データフレームの場合、$で列全体が取り出せる
例:陸上$走り幅跳び
集合データの要素参照(続)
• 範囲参照
例: x[2:3] x[c(2,3)]
• 条件参照
1)除外条件: 例: x[-2] :2番目の要素以外
2) 条件式: 例: x[ x > 1]: 1より大きい要素
注意:リストの要素参照で、単純参照をすると「部分リ
スト」が返る。要素そのものを取り出す場合は、以下
のようにする: w[ [2] ]
演算子
• 四則演算
x+y
x–y
x*y
x/y
x %/% y
x %% y
x^y
x %*% y
xをyで割った商
xをyで割った余り
行列xと行列yの積
演算子
• 比較:
x==y
x != y
x > y x >= y
x < y x <= y
• 論理:
!x
x & y (ベクトル)
x | y
x && y (スカラー)
x || y
制御構造
• If文
(1) if (条件式) 真のときに実行する文(ブロック)
(2) if (条件式) 真のときに実行する文(ブロック)
else 偽のときに実行する文(ブロック)
• 繰り返し:breakとnextが使える
(1) for (変数 in 集合) 文(ブロック)
(2) while (条件式) 実行文(ブロック)
(3) repeat 実行文(ブロック)
算術関数、文字列関数
• 各自調べよ
ベクトル演算型プログラミング
• マッピング:入力の集合の各要素について、
同一の処理を行い、それらの結果を結合した
出力を作る
– sapply(xs, f) : xsの各要素に対し関数fを適用し、
結果のベクトルを返す
– lapply(xs,f) : xsの各要素に対し関数fを適用し、
結果のリストを返す
– rapply(xs,f) : xsの各要素に対し「再帰的」に関数
fを適用し、結果のリストを返す
– などなど