狠狠撸

狠狠撸Share a Scribd company logo
R の紹介
山本泰智
注 : 2006 年に筆者が作ったもので、一部の
参考文献やサイトなど、既に有効ではない情
報が含まれます。予めご承知置きください。
R とは。
? 拡張可能な超多機能関数電卓プログラム
(GNU プロジェクトの一つ )
? ベクトル?行列演算
? 統計解析
? データの入出力
? データの可視化
? パッケージ追加
? 独自関数定義
? 微分?積分
? C 等のプログラミング言語で書かれたプログラムとのやり取り
? バイオインフォマティクス関連 R プロジェクト
? Bioconducter
基本
? ‘起動は R’ ‘、終了は q()’
? オプション指定せずに起動した場合は対話環境となる
? 全ての実体 ( 変数、関数等 ) は、?オブジェクト?と呼ばれる
? オブジェクト呼び出し法
? 二項演算 (‘+’ ‘や /’) ‘等を除き、基本的に hoge’ ‘に引数 arg’ を渡して処
‘理させたい場合は、 hoge(arg)’ と入力
? ‘結果をオブジェクト x’ ‘に代入する時には、 x <- hoge(arg)’
? パッケージ
? ‘利用可能なパッケージ一覧を得るには search()’
? ‘インストールされているパッケージの一覧を得るには library()’
? ‘インストールされているパッケージ pkg’ ‘を利用する時は library(pkg)’
? ‘pkg’ ‘についての説明を得るには library(help="pkg")’
? ‘パッケージ pkg’ ‘のインストールは install.packages("pkg")’
CRAN にある場合、ダウンロードし、展開し、ビルドし、インストールす
る
? ‘パッケージのアップデートは update.packages()’
ヘルプ、デモ、例
? ヘルプ
? ‘hoge’ ‘について知りたい場合は、 ?hoge’ ‘もしくは、 help(hoge)’
? ‘キーワード key’ に関連するオブジェクトを探すときは、
‘ help.search("key")’
? ‘パッケージ pkg’ ‘についての情報を得るときは、 help(package="key")’
‘library(help="pkg")’ と同じ
? デモ
? 一部の定義済みオブジェクトにはデモが用意されている
? ‘demo()’ と入力して、用意されているデモの一覧を表示させられる
? ‘demo(package = .packages(all.available = TRUE))’ で利用可能パッ
ケージの全てのデモの一覧を表示させられる
? 例
? 多くの定義済みオブジェクトには利用例が用意されている
? ‘hoge’ ‘の利用例を表示させるときは、 example(hoge)’
? ‘par(ask = TRUE)’ でスクロールして消えないようにする
r-project のホームにあるグラフを描かせてみましょう
? 描画に必要なパッケージのインストール
? 共用マシンなど、書き込み権限を持たない場所に R がインストールされている場
合
? 新たなライブラリを保存し、展開するためのディレクトリを用意
‘このディレクトリを、ココでは便宜上 ~/src/R_pkgs’ とします
‘ mkdir ~/src/R_pkgs’
? ‘パッケージ ade4’ ‘と、 pixmap’ をインストール
‘ install.packages(c("ade4", "pixmap"), lib="~/src/R_pkgs", destdir="~/src/R_pkgs")’
? R ‘のライブラリサーチパスに、 ~/src/R_pkgs’ を加える
‘ .libPaths("~/src/R_pkgs")’
? Windows マシンなど書き込み権限を持つ場所に R がインストールされている場合
? 必要ならば管理者としてログイン
? ‘パッケージ ade4’ ‘と、 pixmap’ をインストール
‘ install.packages(c("ade4", "pixmap"))’
? 描画
? ‘source("http://www.r-project.org/misc/acpclust.R")’
? ‘source("file")’ は、 R に対する一連の処理が書かれていることが想定されるファイ
‘ル file’ を読み込んで実行するための関数
? 上記の例のように、ネットワーク上のファイルや、標準入力を指定することも出来
オブジェクト
? 以下の型 ( 表面上の ) がある
? 値 (integer, double, complex, logical, character)
? ‘NA’ (logical), ‘NaN’ (double), ‘Inf’ (double)
? ベクトル
? 行列
? 配列
? リスト
? データフレーム
? 関数
? ‘NULL’
? ‘オブジェクト x’ ‘の型を知りたい場合は typeof(x)’
? ‘オブジェクト x’ ‘の簡単な構造を知りたい場合は str(x)’
‘全てのオブジェクトについての構造を表示したい場合は ls.str()’
? ‘オブジェクト一覧の取得は objects()’ ‘または ls()’
? ‘オブジェクト x’ ‘の消去は rm(x)’
? ‘全てのオブジェクトを消去する場合には rm(list=ls(all=TRUE))’
オブジェクト名
? 大文字小文字の違いは区別される
? 先頭に数字をつけられない
? 以下の予約語があり、オブジェクト名として使え
ない
? break, in, else, next, for, repeat, function, return, if,
while, TRUE, FALSE
? 以下は定義済みなので、代入できない
? NA, NaN, Inf, NULL
四則演算
演算 演算子
加算 +
累乗 ^
累乗 **
減算 –
除算 ( 整数 ) %/%
乗算 *
剰余 %%
除算 /
スカラー、ベクトル、行列、文字列と代入
? スカラー
? ‘a <- 3’ ‘、 a = 3’ ‘、 3 -> a’ ‘、 a <<- 3’ ‘、 3 ->> a’ ‘、 assign("a",3)’
以上の代入は全て同じ (‘<-’ ‘、 =’ ‘、 ->’ ‘、 <<-’ ‘、 ->>’ ‘、 assign’)
‘但し、 <<-’ ‘と ->>’ は、常にグローバル変数への代入となる
‘ assign’ は代入のコンテキストを指定できる
? ベクトル
? ‘b <- c(1,2,3)’ ‘、 b <- 1:3’
? 行列
? ‘c <- matrix(nrow=3, ncol=4)’ 、
‘ c <- matrix(1:9, nrow=3)’ ‘、 c <- matrix(1:9, 3, 3)’ 、
‘ c <- rbind(1:4, 2:5)’ ‘、 c <- cbind(1:4, 2:5)’
‘c[1][3]’ で 1 行 3 列の要素を取得
‘ c[,3]’ で 3 列目の列ベクトルを取得
? 文字列
? ‘d <- "strings"’ ‘、 d <- paste("str", "ings", sep="")’
‘cat("str", "ingsn", sep="")’
規則的なベクトル生成
内容 表記
3 から 5 まで、交差 1 の数列 3:5
0 から 2 までを 4 等分した数
列
seq(0, 2, length=4)
‘1:length(x)’ と等価 seq(along=x)
3 から 5 まで、交差 0.1 の数
列
seq(3, 5, by=0.1)
‘3:5’ を 2 回繰り返す数列 rep(3:5, times=2)
長さが 5 ‘になるまで 3:5’ を
繰り返す数列
rep(3:5, length=5)
ベクトル操作
内容 表記
k 番目の要素を取得 x[k]
k 番目の要素 ( 配列としてアク
セス )
x[[k]]
k 番目の要素を a に変更 x[k] <- a
1, 4 番目の要素を取得 x[c(1, 4)]
1, 3 番目の要素以外の要素を取
得
x[c(-1, -3)]
T に対応した要素を取得 x[c(F, T, T)]
nan でない要素を取得 x[!is.nan(x)]
ラベル "s" と "o" の要素を取得 x[c("s", "o")]
1, 3 番目の要素を 5, -2 で置換 replace(x, c(1, 3), c(5, -2))ベクトルや行列、配列、リストには、行や列などに名前をつけて、名前でアクセスできる
集合演算
内容 表記
和集合 union(x, y)
積集合 intersect(x, y)
差集合 setdiff(x, y)
集合として等しいか否か setequal(x, y)
重複を排除 unique(x)
‘要素 a’ ‘は集合 x’ に含まれるか
否か
is.element(a, x)
同上 %in%
配列、リスト、データフレーム
? 配列
? 多次元行列オブジェクト
? ‘array(1:3, c(2, 4))’ で 2 X 4 の 2 次元配列を定義
? 行列は配列の 2 次元バージョン
? リスト
? 任意の型のオブジェクトを複数まとめたオブジェクト
? ‘list(c(1,2,3), matrix(1,3,4), array(1,c(2,4,6)), function(x){x})’
で 3 次元ベクトル ( 要素が 1,2,3) 、全ての要素が 1 の 3 行 4 列行
列、全ての要素が 1 の 2x4x6 である 3 次元配列、 x=x という関数
からなるリストを定義
? もちろん、リストのリストも定義できる
? ‘リスト x’ 5 ‘番目の要素を取得するときは x[[5]]’
? データフレーム (data.frame)
? 行方向のサイズが同じである複数の列ベクトルをまとめたリスト
外部とのやり取り
? ‘read.table("file")’ ‘でファイル名 file’ のデータを取得
? ファイルのフォーマットは、デフォルトでは、要素間をスペースで区切る
? ファイル内の 1 行が、 R 内での行列オブジェクトの 1 行に相当
? 特に明示しない限り、ファイル内の先頭 1 行目の要素数が、他の行より一つ少ない
ときに限り、それぞれ、先頭 1 行目、 1 列目が、各列、行の名称として使われる
? ‘matrix(scan("file"), 5, 3)’ の方が高速
? 行や列の名称の取り込みを同時には出来ない
? ‘write.table(x, "file")’ ‘、か write(x, file="file")’ でファイルにデータを書き込む
? ファイルのフォーマットがバイナリでも構わないときは、
‘ save(x, file="file")’ ‘、 や load("file")’ も使える
? ‘file’ は URL や標準入力でも OK
? ‘read.table("")’ で標準入力からデータを取得
? ‘read.table(“http://abc.def/data.txt”)’ で、 http://abc.def/data.txt からデータを取得
? ‘plot’ 等を用いて作成したイメージは ps や eps 、 png 、 jpeg 等の形式で保
存可能
? ‘help("Devices")’ で保存可能形式一覧を取得
? ‘pdf(file="f.pdf")’ ‘で初期化、 dev.off()’ で閉じる
行列演算 1
? 通常の四則演算と同じ要領
? ‘行列 a’ ‘、 b’ ‘、 c’ について、
? ‘a + 2 * b - c’ ( 加算、乗算、減算 )
? ‘a %*% b’ ( 乗算 )
? ‘a * b’ ( 要素毎の乗算 )
? ‘a / b’ ( 要素毎の除算 )
? ‘a %o% b’ ( 外積 )
? ‘a %x% b’ ( クロネッカー積 )
? 連立方程式を解く
? Ax = b という形の方程式 ( 例: x + 3y = 1, 2x + 4y = -2)
? ‘a <- matrix(c(1,2,3,4),2,2)’
? ‘b <- matrix(c(1,-2))’
? ‘solve(a,b)’
? x = -5, y = 2 を得る
行列演算 2
? 転置
? ‘t(a)’
? 行列式
? ‘det(a)’
? 逆行列
? ‘solve(a)’
? 固有値?固有ベクトル
? ‘eigen(a)’
? 特異値分解
? ‘svd(a)’
? 主成分分析
? ‘prcomp(a)’
? QR 分解
? ‘qr(a)’
? コレスキ分解
? ‘chol(a)’
? おまけ:行列のイメージ表示
? ‘image(a)’
繰り返し用関数 ( 処理の高速化 )
? apply() ファミリー
? ある関数を、行列の全ての要素や、列方向の要素毎というかたち
で、まとめて繰り返し適用する際に用いる
? ‘apply(a, 1, sum)’ ‘で行列 a’ の各行の要素の和を取得
? ‘その他、 lapply’ ‘、 sapply’ ‘、 tapply’ ‘、 mapply’ があり、リスト
に対して適用したりする
? ‘sweep(a, 2, apply(a, 2, sum), FUN=“/”)’ ‘で行列 a’ の列方向毎に
和を取り、更に列ごとに、その和で各要素を割る
? R での処理を高速化するコツ
? ?一つずつ沢山?ではなくて、「沢山を一度に?
? for 文等の繰り返しを避け、ベクトルや行列の演算の形にする
? 要素毎の条件分岐を避け、ベクトルについて一度の処理にまとめ
る
統計解析
? 和、平均、分散など基本的な関数群が一通りある
? sum(x), mean(x), median(x), var(x), sd(x), max(x), min(x)
? weighted.mean(x), var(x,y), cor(x,y), IQR(x)
? fivenum(x), quantile(x), range(x), ave(x)
? 回帰分析
? ‘線形回帰を行う関数 lm()’ を使う
? 例:身長と体重の関係を最小二乗法で
? height <- c(177,165,175,168,171,168,190,167,173,172,171,177)
weight <- c( 62, 65, 75, 58, 59, 66, 74, 61, 70, 80, 71, 68)
result <- lm(height ~ weight)
? 結果表示
result
Call:
lm(formula = height ~ weight)
Coefficients:
(Intercept) weight
144.5538 0.4195
? ‘summary(result)’ で解析結果の要約が得られる
検定関数 ( 全て後に ‘ .test()’ を付ける )
手法 表記 手法 表記
Ansari-Bradley ansari McNemar mcnemar
Bartlett bartlett Mood mood
二項 binom 一元配置分散 oneway
Pearson の χ2
chisq Quade quade
Spearman の順位相関係数 cor 比率の同一性 prop
Fisher の正確 fisher 傾向性 prop.trend
Fligner-Killeen fligner Shapiro-Wilk shapiro
Friedman の順位総和 friedman t t
Kruskal-Wallis の順位総和 kruskal F var
Kolmogorov-Smirnov ks Wilcoxon の順位和 wilcox
Cochran-Mantel-Haenszelχ2
mantelhaen
確率分布
分布 表記 分布 表記
ベータ beta ロジスティック logis
二項 binom 多変量正規 multinom
コーシー cauchy 負の二項 nbinom
χ 二乗 chisq 正規 norm
指数 exp ポワソン pois
F f t t
ガンマ gamma 一様 unif
幾何 geom スチューデント化された tukey
超幾何 hyper ワイブル weibull
対数正規 lnorm
ウィルコクソンの順位和統計
量
wilcox
ウィルコクソンの符号付順
位和統計量
signrank
統計解析関数
? 確率密度 (pdf)
? d_dist_
? 累積分布 (cdf)
? p_dist_
? 分位数 (quantile)
? q_rist_
? 乱数
? r_dist_
? _dist_ = {unif, norm, pois, binom, ...}
可視化
? プロット関数
? ‘plot’ ‘、 sunflowerplot’ ‘、 curve’ ‘、 matplot’ ‘、 hist’ ‘、 boxplot’ ‘、 barplot’ ‘、 dotchart’ ‘、 pie’
など
? 直線描画
? ‘abline’ ‘、 segments’ ‘、 arrows’ ‘、 rect’ など
? 文字描画
? ‘text’ ‘、 mtext’ など
? 枠描画
? ‘box’
? タイトル?サブタイトル描画
? ‘title’
? 座標軸描画
? ‘axis’
? 凡例描画
? ‘legend’
? 多角形
? ‘polygon’
その他
? クラスター解析
? ‘hclust()’
? 微分
? ‘D(f, "x")’ ‘関数 f’ ‘を x’ を変数として微分
? ‘deriv(~ f, "x", func=T)’
? 例:
f <- deriv(~ x^2, "x", func=T)
f(-2)
? 積分
? ‘integrate(f, b, e)’ ‘関数 f’ ‘を b’ ‘から e’ まで積分
各种パッケージに関する解説を取得する各种パッケージに関する解説を取得する
関数定義
? ‘オブジェクト hoge’ を関数として定義するとき
は、
‘ hoge <- function (x) { … }’
? 例:ハノイ
? 定義
hanoi <- function(f,t,z) if(z>0) {
c <- 6-f-t; y <- z-1
hanoi(f, c, y)
cat("disc ", z, " p", f, "-> p", t, "n")
hanoi(c, t, y)
}
? 実行
honoi(1, 2, 5) moonty
関数定義の例 : λ 計算 ( 定義 )
? zero <- function(f) function(x) x
λλ f x. xf x. x
? succ <- function(n) function(f) function(x) f(n(f)(x))
λλ n f x. f (n f x)n f x. f (n f x)
? add <- function(m) function(n) function(f) function(x) m(f)(n(f)(x))
λλ m n f x. m f (n f x)m n f x. m f (n f x)
? mul <- function(m) function(n) function(f) m(n(f))
λλ m n f. m (n f)m n f. m (n f)
? pow <- function(m) function(n) n(m)
λλ m. n mm. n m
? pred <- function(n) function(f) function(x) n(function(g) function(h)
h(g(f))) (function(u) x) (function(u) u) ← バグあり
?? n f x. n (n f x. n (λλ g h. h (g f)) (g h. h (g f)) (λλ u. x) (u. x) (λλ u. u)u. u)
関数定義の例 :λ 計算 ( 実行 )
? one <- succ(zero)
? two <- succ(one)
? four <- add(two)(two)
? eight <- mul(two)(four)
? sixteen <- pow(two)(four)
? numbers <- c(one, two, four, eight, sixteen)
? lapply(numbers,
function(x)
paste(x(function(n) n+1)(0), "=",
x(function(n) paste("(1+", n, ")", sep=""))(0)))
詳しい情報元
? オンライン
? http://www.r-project.org/
? R プロジェクトのホームページ
? http://www.okada.jp.org/RWiki/
? 日本語で R に関する情報交換をする wiki
? http://www.bioconductor.org/
? Bioconductor のホームページ
? 書籍 ( 日本語 )
? 舟尾 暢男 ( 編集 ) 、 The R Tips― データ解析環境 R の基本技?グ
ラフィックス活用集、九天社、 ISBN: 486167039X 、 (2005/02)
? 岡田 昌史 ( 編集 ) 、 The R Book― データ解析環境 R の活用事例集
、九天社、 ISBN: 4901676970 、新版 (2004/05)
? 他多数、上記 RWiki のページに関連文献リストが掲載されている
Related Projects
? Special Areas of Application
? Bioconductor: Bioinformatics with R
? Microarray Software Comparison
? Rgeo: Spatial Statistics with R
? gR: gRaphical models in R
? Robust: Robust Statistics with R
? Rmetrics: Financial Market Analysis with R
? Jim Lindsey's R page
(nonlinear regression and repeated measurements)
? Computational Infrastructure
? Omega: Distributed Statistical Computing
? R GUIs: Graphical User Interfaces for R
? ESS: Emacs speaks Statistics
? R web servers: R Interfaces to Web Servers
? R Zope
? Misc
? Statlib S Archive
? Virtual Data Center
What is R?
? R is a language and environment for statistical
computing and graphics.
? It is a GNU project which is similar to the S
language and environment which was developed
at Bell Laboratories (formerly AT&T, now Lucent
Technologies) by John Chambers and colleagues.
? R can be considered as a different implementation
of S.
? There are some important differences, but much
code written for S runs unaltered under R.

More Related Content

R intro

  • 1. R の紹介 山本泰智 注 : 2006 年に筆者が作ったもので、一部の 参考文献やサイトなど、既に有効ではない情 報が含まれます。予めご承知置きください。
  • 2. R とは。 ? 拡張可能な超多機能関数電卓プログラム (GNU プロジェクトの一つ ) ? ベクトル?行列演算 ? 統計解析 ? データの入出力 ? データの可視化 ? パッケージ追加 ? 独自関数定義 ? 微分?積分 ? C 等のプログラミング言語で書かれたプログラムとのやり取り ? バイオインフォマティクス関連 R プロジェクト ? Bioconducter
  • 3. 基本 ? ‘起動は R’ ‘、終了は q()’ ? オプション指定せずに起動した場合は対話環境となる ? 全ての実体 ( 変数、関数等 ) は、?オブジェクト?と呼ばれる ? オブジェクト呼び出し法 ? 二項演算 (‘+’ ‘や /’) ‘等を除き、基本的に hoge’ ‘に引数 arg’ を渡して処 ‘理させたい場合は、 hoge(arg)’ と入力 ? ‘結果をオブジェクト x’ ‘に代入する時には、 x <- hoge(arg)’ ? パッケージ ? ‘利用可能なパッケージ一覧を得るには search()’ ? ‘インストールされているパッケージの一覧を得るには library()’ ? ‘インストールされているパッケージ pkg’ ‘を利用する時は library(pkg)’ ? ‘pkg’ ‘についての説明を得るには library(help="pkg")’ ? ‘パッケージ pkg’ ‘のインストールは install.packages("pkg")’ CRAN にある場合、ダウンロードし、展開し、ビルドし、インストールす る ? ‘パッケージのアップデートは update.packages()’
  • 4. ヘルプ、デモ、例 ? ヘルプ ? ‘hoge’ ‘について知りたい場合は、 ?hoge’ ‘もしくは、 help(hoge)’ ? ‘キーワード key’ に関連するオブジェクトを探すときは、 ‘ help.search("key")’ ? ‘パッケージ pkg’ ‘についての情報を得るときは、 help(package="key")’ ‘library(help="pkg")’ と同じ ? デモ ? 一部の定義済みオブジェクトにはデモが用意されている ? ‘demo()’ と入力して、用意されているデモの一覧を表示させられる ? ‘demo(package = .packages(all.available = TRUE))’ で利用可能パッ ケージの全てのデモの一覧を表示させられる ? 例 ? 多くの定義済みオブジェクトには利用例が用意されている ? ‘hoge’ ‘の利用例を表示させるときは、 example(hoge)’ ? ‘par(ask = TRUE)’ でスクロールして消えないようにする
  • 5. r-project のホームにあるグラフを描かせてみましょう ? 描画に必要なパッケージのインストール ? 共用マシンなど、書き込み権限を持たない場所に R がインストールされている場 合 ? 新たなライブラリを保存し、展開するためのディレクトリを用意 ‘このディレクトリを、ココでは便宜上 ~/src/R_pkgs’ とします ‘ mkdir ~/src/R_pkgs’ ? ‘パッケージ ade4’ ‘と、 pixmap’ をインストール ‘ install.packages(c("ade4", "pixmap"), lib="~/src/R_pkgs", destdir="~/src/R_pkgs")’ ? R ‘のライブラリサーチパスに、 ~/src/R_pkgs’ を加える ‘ .libPaths("~/src/R_pkgs")’ ? Windows マシンなど書き込み権限を持つ場所に R がインストールされている場合 ? 必要ならば管理者としてログイン ? ‘パッケージ ade4’ ‘と、 pixmap’ をインストール ‘ install.packages(c("ade4", "pixmap"))’ ? 描画 ? ‘source("http://www.r-project.org/misc/acpclust.R")’ ? ‘source("file")’ は、 R に対する一連の処理が書かれていることが想定されるファイ ‘ル file’ を読み込んで実行するための関数 ? 上記の例のように、ネットワーク上のファイルや、標準入力を指定することも出来
  • 6. オブジェクト ? 以下の型 ( 表面上の ) がある ? 値 (integer, double, complex, logical, character) ? ‘NA’ (logical), ‘NaN’ (double), ‘Inf’ (double) ? ベクトル ? 行列 ? 配列 ? リスト ? データフレーム ? 関数 ? ‘NULL’ ? ‘オブジェクト x’ ‘の型を知りたい場合は typeof(x)’ ? ‘オブジェクト x’ ‘の簡単な構造を知りたい場合は str(x)’ ‘全てのオブジェクトについての構造を表示したい場合は ls.str()’ ? ‘オブジェクト一覧の取得は objects()’ ‘または ls()’ ? ‘オブジェクト x’ ‘の消去は rm(x)’ ? ‘全てのオブジェクトを消去する場合には rm(list=ls(all=TRUE))’
  • 7. オブジェクト名 ? 大文字小文字の違いは区別される ? 先頭に数字をつけられない ? 以下の予約語があり、オブジェクト名として使え ない ? break, in, else, next, for, repeat, function, return, if, while, TRUE, FALSE ? 以下は定義済みなので、代入できない ? NA, NaN, Inf, NULL
  • 8. 四則演算 演算 演算子 加算 + 累乗 ^ 累乗 ** 減算 – 除算 ( 整数 ) %/% 乗算 * 剰余 %% 除算 /
  • 9. スカラー、ベクトル、行列、文字列と代入 ? スカラー ? ‘a <- 3’ ‘、 a = 3’ ‘、 3 -> a’ ‘、 a <<- 3’ ‘、 3 ->> a’ ‘、 assign("a",3)’ 以上の代入は全て同じ (‘<-’ ‘、 =’ ‘、 ->’ ‘、 <<-’ ‘、 ->>’ ‘、 assign’) ‘但し、 <<-’ ‘と ->>’ は、常にグローバル変数への代入となる ‘ assign’ は代入のコンテキストを指定できる ? ベクトル ? ‘b <- c(1,2,3)’ ‘、 b <- 1:3’ ? 行列 ? ‘c <- matrix(nrow=3, ncol=4)’ 、 ‘ c <- matrix(1:9, nrow=3)’ ‘、 c <- matrix(1:9, 3, 3)’ 、 ‘ c <- rbind(1:4, 2:5)’ ‘、 c <- cbind(1:4, 2:5)’ ‘c[1][3]’ で 1 行 3 列の要素を取得 ‘ c[,3]’ で 3 列目の列ベクトルを取得 ? 文字列 ? ‘d <- "strings"’ ‘、 d <- paste("str", "ings", sep="")’ ‘cat("str", "ingsn", sep="")’
  • 10. 規則的なベクトル生成 内容 表記 3 から 5 まで、交差 1 の数列 3:5 0 から 2 までを 4 等分した数 列 seq(0, 2, length=4) ‘1:length(x)’ と等価 seq(along=x) 3 から 5 まで、交差 0.1 の数 列 seq(3, 5, by=0.1) ‘3:5’ を 2 回繰り返す数列 rep(3:5, times=2) 長さが 5 ‘になるまで 3:5’ を 繰り返す数列 rep(3:5, length=5)
  • 11. ベクトル操作 内容 表記 k 番目の要素を取得 x[k] k 番目の要素 ( 配列としてアク セス ) x[[k]] k 番目の要素を a に変更 x[k] <- a 1, 4 番目の要素を取得 x[c(1, 4)] 1, 3 番目の要素以外の要素を取 得 x[c(-1, -3)] T に対応した要素を取得 x[c(F, T, T)] nan でない要素を取得 x[!is.nan(x)] ラベル "s" と "o" の要素を取得 x[c("s", "o")] 1, 3 番目の要素を 5, -2 で置換 replace(x, c(1, 3), c(5, -2))ベクトルや行列、配列、リストには、行や列などに名前をつけて、名前でアクセスできる
  • 12. 集合演算 内容 表記 和集合 union(x, y) 積集合 intersect(x, y) 差集合 setdiff(x, y) 集合として等しいか否か setequal(x, y) 重複を排除 unique(x) ‘要素 a’ ‘は集合 x’ に含まれるか 否か is.element(a, x) 同上 %in%
  • 13. 配列、リスト、データフレーム ? 配列 ? 多次元行列オブジェクト ? ‘array(1:3, c(2, 4))’ で 2 X 4 の 2 次元配列を定義 ? 行列は配列の 2 次元バージョン ? リスト ? 任意の型のオブジェクトを複数まとめたオブジェクト ? ‘list(c(1,2,3), matrix(1,3,4), array(1,c(2,4,6)), function(x){x})’ で 3 次元ベクトル ( 要素が 1,2,3) 、全ての要素が 1 の 3 行 4 列行 列、全ての要素が 1 の 2x4x6 である 3 次元配列、 x=x という関数 からなるリストを定義 ? もちろん、リストのリストも定義できる ? ‘リスト x’ 5 ‘番目の要素を取得するときは x[[5]]’ ? データフレーム (data.frame) ? 行方向のサイズが同じである複数の列ベクトルをまとめたリスト
  • 14. 外部とのやり取り ? ‘read.table("file")’ ‘でファイル名 file’ のデータを取得 ? ファイルのフォーマットは、デフォルトでは、要素間をスペースで区切る ? ファイル内の 1 行が、 R 内での行列オブジェクトの 1 行に相当 ? 特に明示しない限り、ファイル内の先頭 1 行目の要素数が、他の行より一つ少ない ときに限り、それぞれ、先頭 1 行目、 1 列目が、各列、行の名称として使われる ? ‘matrix(scan("file"), 5, 3)’ の方が高速 ? 行や列の名称の取り込みを同時には出来ない ? ‘write.table(x, "file")’ ‘、か write(x, file="file")’ でファイルにデータを書き込む ? ファイルのフォーマットがバイナリでも構わないときは、 ‘ save(x, file="file")’ ‘、 や load("file")’ も使える ? ‘file’ は URL や標準入力でも OK ? ‘read.table("")’ で標準入力からデータを取得 ? ‘read.table(“http://abc.def/data.txt”)’ で、 http://abc.def/data.txt からデータを取得 ? ‘plot’ 等を用いて作成したイメージは ps や eps 、 png 、 jpeg 等の形式で保 存可能 ? ‘help("Devices")’ で保存可能形式一覧を取得 ? ‘pdf(file="f.pdf")’ ‘で初期化、 dev.off()’ で閉じる
  • 15. 行列演算 1 ? 通常の四則演算と同じ要領 ? ‘行列 a’ ‘、 b’ ‘、 c’ について、 ? ‘a + 2 * b - c’ ( 加算、乗算、減算 ) ? ‘a %*% b’ ( 乗算 ) ? ‘a * b’ ( 要素毎の乗算 ) ? ‘a / b’ ( 要素毎の除算 ) ? ‘a %o% b’ ( 外積 ) ? ‘a %x% b’ ( クロネッカー積 ) ? 連立方程式を解く ? Ax = b という形の方程式 ( 例: x + 3y = 1, 2x + 4y = -2) ? ‘a <- matrix(c(1,2,3,4),2,2)’ ? ‘b <- matrix(c(1,-2))’ ? ‘solve(a,b)’ ? x = -5, y = 2 を得る
  • 16. 行列演算 2 ? 転置 ? ‘t(a)’ ? 行列式 ? ‘det(a)’ ? 逆行列 ? ‘solve(a)’ ? 固有値?固有ベクトル ? ‘eigen(a)’ ? 特異値分解 ? ‘svd(a)’ ? 主成分分析 ? ‘prcomp(a)’ ? QR 分解 ? ‘qr(a)’ ? コレスキ分解 ? ‘chol(a)’ ? おまけ:行列のイメージ表示 ? ‘image(a)’
  • 17. 繰り返し用関数 ( 処理の高速化 ) ? apply() ファミリー ? ある関数を、行列の全ての要素や、列方向の要素毎というかたち で、まとめて繰り返し適用する際に用いる ? ‘apply(a, 1, sum)’ ‘で行列 a’ の各行の要素の和を取得 ? ‘その他、 lapply’ ‘、 sapply’ ‘、 tapply’ ‘、 mapply’ があり、リスト に対して適用したりする ? ‘sweep(a, 2, apply(a, 2, sum), FUN=“/”)’ ‘で行列 a’ の列方向毎に 和を取り、更に列ごとに、その和で各要素を割る ? R での処理を高速化するコツ ? ?一つずつ沢山?ではなくて、「沢山を一度に? ? for 文等の繰り返しを避け、ベクトルや行列の演算の形にする ? 要素毎の条件分岐を避け、ベクトルについて一度の処理にまとめ る
  • 18. 統計解析 ? 和、平均、分散など基本的な関数群が一通りある ? sum(x), mean(x), median(x), var(x), sd(x), max(x), min(x) ? weighted.mean(x), var(x,y), cor(x,y), IQR(x) ? fivenum(x), quantile(x), range(x), ave(x) ? 回帰分析 ? ‘線形回帰を行う関数 lm()’ を使う ? 例:身長と体重の関係を最小二乗法で ? height <- c(177,165,175,168,171,168,190,167,173,172,171,177) weight <- c( 62, 65, 75, 58, 59, 66, 74, 61, 70, 80, 71, 68) result <- lm(height ~ weight) ? 結果表示 result Call: lm(formula = height ~ weight) Coefficients: (Intercept) weight 144.5538 0.4195 ? ‘summary(result)’ で解析結果の要約が得られる
  • 19. 検定関数 ( 全て後に ‘ .test()’ を付ける ) 手法 表記 手法 表記 Ansari-Bradley ansari McNemar mcnemar Bartlett bartlett Mood mood 二項 binom 一元配置分散 oneway Pearson の χ2 chisq Quade quade Spearman の順位相関係数 cor 比率の同一性 prop Fisher の正確 fisher 傾向性 prop.trend Fligner-Killeen fligner Shapiro-Wilk shapiro Friedman の順位総和 friedman t t Kruskal-Wallis の順位総和 kruskal F var Kolmogorov-Smirnov ks Wilcoxon の順位和 wilcox Cochran-Mantel-Haenszelχ2 mantelhaen
  • 20. 確率分布 分布 表記 分布 表記 ベータ beta ロジスティック logis 二項 binom 多変量正規 multinom コーシー cauchy 負の二項 nbinom χ 二乗 chisq 正規 norm 指数 exp ポワソン pois F f t t ガンマ gamma 一様 unif 幾何 geom スチューデント化された tukey 超幾何 hyper ワイブル weibull 対数正規 lnorm ウィルコクソンの順位和統計 量 wilcox ウィルコクソンの符号付順 位和統計量 signrank
  • 21. 統計解析関数 ? 確率密度 (pdf) ? d_dist_ ? 累積分布 (cdf) ? p_dist_ ? 分位数 (quantile) ? q_rist_ ? 乱数 ? r_dist_ ? _dist_ = {unif, norm, pois, binom, ...}
  • 22. 可視化 ? プロット関数 ? ‘plot’ ‘、 sunflowerplot’ ‘、 curve’ ‘、 matplot’ ‘、 hist’ ‘、 boxplot’ ‘、 barplot’ ‘、 dotchart’ ‘、 pie’ など ? 直線描画 ? ‘abline’ ‘、 segments’ ‘、 arrows’ ‘、 rect’ など ? 文字描画 ? ‘text’ ‘、 mtext’ など ? 枠描画 ? ‘box’ ? タイトル?サブタイトル描画 ? ‘title’ ? 座標軸描画 ? ‘axis’ ? 凡例描画 ? ‘legend’ ? 多角形 ? ‘polygon’
  • 23. その他 ? クラスター解析 ? ‘hclust()’ ? 微分 ? ‘D(f, "x")’ ‘関数 f’ ‘を x’ を変数として微分 ? ‘deriv(~ f, "x", func=T)’ ? 例: f <- deriv(~ x^2, "x", func=T) f(-2) ? 積分 ? ‘integrate(f, b, e)’ ‘関数 f’ ‘を b’ ‘から e’ まで積分
  • 25. 関数定義 ? ‘オブジェクト hoge’ を関数として定義するとき は、 ‘ hoge <- function (x) { … }’ ? 例:ハノイ ? 定義 hanoi <- function(f,t,z) if(z>0) { c <- 6-f-t; y <- z-1 hanoi(f, c, y) cat("disc ", z, " p", f, "-> p", t, "n") hanoi(c, t, y) } ? 実行 honoi(1, 2, 5) moonty
  • 26. 関数定義の例 : λ 計算 ( 定義 ) ? zero <- function(f) function(x) x λλ f x. xf x. x ? succ <- function(n) function(f) function(x) f(n(f)(x)) λλ n f x. f (n f x)n f x. f (n f x) ? add <- function(m) function(n) function(f) function(x) m(f)(n(f)(x)) λλ m n f x. m f (n f x)m n f x. m f (n f x) ? mul <- function(m) function(n) function(f) m(n(f)) λλ m n f. m (n f)m n f. m (n f) ? pow <- function(m) function(n) n(m) λλ m. n mm. n m ? pred <- function(n) function(f) function(x) n(function(g) function(h) h(g(f))) (function(u) x) (function(u) u) ← バグあり ?? n f x. n (n f x. n (λλ g h. h (g f)) (g h. h (g f)) (λλ u. x) (u. x) (λλ u. u)u. u)
  • 27. 関数定義の例 :λ 計算 ( 実行 ) ? one <- succ(zero) ? two <- succ(one) ? four <- add(two)(two) ? eight <- mul(two)(four) ? sixteen <- pow(two)(four) ? numbers <- c(one, two, four, eight, sixteen) ? lapply(numbers, function(x) paste(x(function(n) n+1)(0), "=", x(function(n) paste("(1+", n, ")", sep=""))(0)))
  • 28. 詳しい情報元 ? オンライン ? http://www.r-project.org/ ? R プロジェクトのホームページ ? http://www.okada.jp.org/RWiki/ ? 日本語で R に関する情報交換をする wiki ? http://www.bioconductor.org/ ? Bioconductor のホームページ ? 書籍 ( 日本語 ) ? 舟尾 暢男 ( 編集 ) 、 The R Tips― データ解析環境 R の基本技?グ ラフィックス活用集、九天社、 ISBN: 486167039X 、 (2005/02) ? 岡田 昌史 ( 編集 ) 、 The R Book― データ解析環境 R の活用事例集 、九天社、 ISBN: 4901676970 、新版 (2004/05) ? 他多数、上記 RWiki のページに関連文献リストが掲載されている
  • 29. Related Projects ? Special Areas of Application ? Bioconductor: Bioinformatics with R ? Microarray Software Comparison ? Rgeo: Spatial Statistics with R ? gR: gRaphical models in R ? Robust: Robust Statistics with R ? Rmetrics: Financial Market Analysis with R ? Jim Lindsey's R page (nonlinear regression and repeated measurements) ? Computational Infrastructure ? Omega: Distributed Statistical Computing ? R GUIs: Graphical User Interfaces for R ? ESS: Emacs speaks Statistics ? R web servers: R Interfaces to Web Servers ? R Zope ? Misc ? Statlib S Archive ? Virtual Data Center
  • 30. What is R? ? R is a language and environment for statistical computing and graphics. ? It is a GNU project which is similar to the S language and environment which was developed at Bell Laboratories (formerly AT&T, now Lucent Technologies) by John Chambers and colleagues. ? R can be considered as a different implementation of S. ? There are some important differences, but much code written for S runs unaltered under R.