O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Carregando em…3
×

Confira estes a seguir

1 de 30 Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (19)

Semelhante a R intro (20)

Anúncio

Mais de yayamamo @ DBCLS Kashiwanoha (20)

Mais recentes (20)

Anúncio

R intro

  1. 1. R の紹介 山本泰智 注 : 2006 年に筆者が作ったもので、一部の 参考文献やサイトなど、既に有効ではない情 報が含まれます。予めご承知置きください。
  2. 2. R とは。  拡張可能な超多機能関数電卓プログラム (GNU プロジェクトの一つ )  ベクトル・行列演算  統計解析  データの入出力  データの可視化  パッケージ追加  独自関数定義  微分・積分  C 等のプログラミング言語で書かれたプログラムとのやり取り  バイオインフォマティクス関連 R プロジェクト  Bioconducter
  3. 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. 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. 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. 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. 7. オブジェクト名  大文字小文字の違いは区別される  先頭に数字をつけられない  以下の予約語があり、オブジェクト名として使え ない  break, in, else, next, for, repeat, function, return, if, while, TRUE, FALSE  以下は定義済みなので、代入できない  NA, NaN, Inf, NULL
  8. 8. 四則演算 演算 演算子 加算 + 累乗 ^ 累乗 ** 減算 – 除算 ( 整数 ) %/% 乗算 * 剰余 %% 除算 /
  9. 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. 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. 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. 12. 集合演算 内容 表記 和集合 union(x, y) 積集合 intersect(x, y) 差集合 setdiff(x, y) 集合として等しいか否か setequal(x, y) 重複を排除 unique(x) ‘要素 a’ ‘は集合 x’ に含まれるか 否か is.element(a, x) 同上 %in%
  13. 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. 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. 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. 16. 行列演算 2  転置  ‘t(a)’  行列式  ‘det(a)’  逆行列  ‘solve(a)’  固有値・固有ベクトル  ‘eigen(a)’  特異値分解  ‘svd(a)’  主成分分析  ‘prcomp(a)’  QR 分解  ‘qr(a)’  コレスキ分解  ‘chol(a)’  おまけ:行列のイメージ表示  ‘image(a)’
  17. 17. 繰り返し用関数 ( 処理の高速化 )  apply() ファミリー  ある関数を、行列の全ての要素や、列方向の要素毎というかたち で、まとめて繰り返し適用する際に用いる  ‘apply(a, 1, sum)’ ‘で行列 a’ の各行の要素の和を取得  ‘その他、 lapply’ ‘、 sapply’ ‘、 tapply’ ‘、 mapply’ があり、リスト に対して適用したりする  ‘sweep(a, 2, apply(a, 2, sum), FUN=“/”)’ ‘で行列 a’ の列方向毎に 和を取り、更に列ごとに、その和で各要素を割る  R での処理を高速化するコツ  「一つずつ沢山」ではなくて、「沢山を一度に」  for 文等の繰り返しを避け、ベクトルや行列の演算の形にする  要素毎の条件分岐を避け、ベクトルについて一度の処理にまとめ る
  18. 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. 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. 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. 21. 統計解析関数  確率密度 (pdf)  d_dist_  累積分布 (cdf)  p_dist_  分位数 (quantile)  q_rist_  乱数  r_dist_  _dist_ = {unif, norm, pois, binom, ...}
  22. 22. 可視化  プロット関数  ‘plot’ ‘、 sunflowerplot’ ‘、 curve’ ‘、 matplot’ ‘、 hist’ ‘、 boxplot’ ‘、 barplot’ ‘、 dotchart’ ‘、 pie’ など  直線描画  ‘abline’ ‘、 segments’ ‘、 arrows’ ‘、 rect’ など  文字描画  ‘text’ ‘、 mtext’ など  枠描画  ‘box’  タイトル・サブタイトル描画  ‘title’  座標軸描画  ‘axis’  凡例描画  ‘legend’  多角形  ‘polygon’
  23. 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’ まで積分
  24. 24. 各種パッケージに関する解説を取得する各種パッケージに関する解説を取得する
  25. 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. 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. 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. 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. 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. 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.

×