12-11-30 kashiwa.r #5 初めてのR rを始める前に知っておきたい10のこと
TRANSCRIPT
12/11/16
初めてのRR を始める前に知っておきたい 10 のこと R を始める前に知っておきたい 10 のこと R を始める前に知っておきたい 10 のこと
@yuifu
そんなに知る必要はなかったかもしれません…
そんなに知る必要はなかったかもしれません…
Rはとっつきやすい• Rは CUI とかプログラミングをあまりや
ったことない人でも使える
• パッケージが充実
• 生物系や人文系も使う(統計に必要だからといった理由)
• ネットでドキュメントも充実
http://www.flickr.com/photos/geekdreams/4981490170/in/photostream
トラブルもある…• Rを扱うのに情報系の知識がないと
トラブルに陥りがち
• マニュアル通りにできればいいけどエラーに対応できない
• Rの中身,言語の特性を知っていれば色々捗る
http://www.flickr.com/photos/geekdreams/4980887029/
知っておくと便利なことがある• 本発表では,
•プログラミングとかコマンド入力に不慣れな人が
• Rを始める上で知っておくと色々捗るぞ
• なことを概説する
http://www.flickr.com/photos/geekdreams/4980892135/in/photostream
今日の内容1 .代入2.データ型3.データ構造4.引数と戻り値5.ディレクトリ 6.データの入出力7.デフォルト8.実行される順番9.RStudio
1 0.ヘルプ
http://www.flickr.com/photos/geekdreams/4982938127/sizes/l/in/photostream/
代入• 変数に値を入れることを代入という
• 容れ物 <- 入れたいもの
1
x <- 1x <- 1
> result <- t.test(a, na.action=T)> result> result <- t.test(a, na.action=T)> result One Sample t-testdata: a t = One Sample t-testdata: a t = 5.7446, df = 9, p-value = 0.0002782alternative hypothesis: true mean is not 5.7446, df = 9, p-value = 0.0002782alternative hypothesis: true mean is not equal to 0 95 percent confidence interval: 3.334149 7.665851 sample equal to 0 95 percent confidence interval: 3.334149 7.665851 sample estimates:mean of x 5.5 estimates:mean of x 5.5
データ型• Rではすべてがオブジェクト
• それぞれのオブジェクトが1つのクラスに属する class( )
• オブジェクトには長さがある length( )
• すべてのオブジェクトにはデータ型またはモードがある mode( )
2> (x <- matrix(0, 2, 3)) [,1] [,2] [,3]> (x <- matrix(0, 2, 3)) [,1] [,2] [,3][1,] 0 0 0[2,] 0 0 0> [1,] 0 0 0[2,] 0 0 0> class(x)[1] "matrix"> mode(x)[1] class(x)[1] "matrix"> mode(x)[1] "numeric"> length(x)[1] 6"numeric"> length(x)[1] 6
データ型• atomic なデータ型( type )
• NULL: 空の値
• logical: 論理値( TRUE/FALSE/NA )
• numeric: 整数・実数
• complex: 複素数
• character: 文字・文字列
• 下のデータ型は上のデータ型を表現可能
• 下のデータ型を上のデータ型に変換すると情報の損失がおこる
• あと factor (カテゴリカル変数)も
2> (x <- matrix(0, 2, 3)) [,1] [,2] [,3]> (x <- matrix(0, 2, 3)) [,1] [,2] [,3][1,] 0 0 0[2,] 0 0 0> [1,] 0 0 0[2,] 0 0 0> class(x)[1] "matrix"> mode(x)[1] class(x)[1] "matrix"> mode(x)[1] "numeric"> length(x)[1] 6"numeric"> length(x)[1] 6
データ型• あるデータ型のオブジェクトをつく
る
• numeric( ) など
• あるデータ型かどうかを確かめる
• is.numeric( ) など
• データ型を変換する
• as.numeric( ) など
2
> (a <- numeric(1))[1] 0> > (a <- numeric(1))[1] 0> is.character(a)[1] FALSE> is.character(a)[1] FALSE> is.logical(a)[1] FALSE> is.numeric(a)is.logical(a)[1] FALSE> is.numeric(a)[1] TRUE> b <- 3.14> as.logical(b)[1] [1] TRUE> b <- 3.14> as.logical(b)[1] TRUETRUE> b * 5[1] 15.7> as.logical(b) * 5[1] 5> > b * 5[1] 15.7> as.logical(b) * 5[1] 5> as.character(b)[1] "3.14"as.character(b)[1] "3.14"
データ構造• データ構造 : 色んなデータ型のオブジェクトを集めたもの
• 同じデータ型のオブジェクトのみから成るもの
• ベクトル vector : 1 次元
• 行列 matrix : 2 次元
• 配列 array : 多次元
• 異なるデータ型のオブジェクトから成るもの
• リスト list : 何でも
• データフレーム data frame : 特殊なリスト(各要素は同じ長さのベクトル)
3
データ構造• つくりかた
• ベクトルは色々
• c( )
• rep( )
• seq( )
• matrix( )
• array( )
• list( )
• data.frame( )
3> (x <- c("Alice", "Bob"))[1] "Alice" "Bob" > (x <- c("Alice", "Bob"))[1] "Alice" "Bob" > (a <- matrix(1:10, 2, 5)) [,1] [,2] [,3] [,4] [,5][1,] 1 3 5 7 9[2,] 2 4 > (a <- matrix(1:10, 2, 5)) [,1] [,2] [,3] [,4] [,5][1,] 1 3 5 7 9[2,] 2 4 6 8 10 6 8 10
> (l <- list(c(1,2,3,4), matrix(1:4, 2, 2)))[[1]][1] 1 2 3 4[[2]] [,1] [,2][1,] 1 3[2,] > (l <- list(c(1,2,3,4), matrix(1:4, 2, 2)))[[1]][1] 1 2 3 4[[2]] [,1] [,2][1,] 1 3[2,] 2 4 2 4> (d <- data.frame(name = c("Nobita", "Takeshi", "Shizuka"), sex=c("M", "M", > (d <- data.frame(name = c("Nobita", "Takeshi", "Shizuka"), sex=c("M", "M", "F"), age = c(11, 12, 11))) name sex age1 Nobita M 112 Takeshi M 123 "F"), age = c(11, 12, 11))) name sex age1 Nobita M 112 Takeshi M 123 Shizuka F 11Shizuka F 11
データ構造• 要素へのアクセス
• ベクトル : x[1]
• 行列 : x[1, 2]
• 配列 : x[1, 2, 2]
• リスト : x[[1]]
• データフレーム : 色々
3> x[1][1] "Alice"> x[1][1] "Alice"
> a[1,2][1] 3> a[1,2][1] 3
> l[[1]][1] 1 2 3 4> l[[1]][2][1] 2> l[[1]][1] 1 2 3 4> l[[1]][2][1] 2
> d[[1]][1] Nobita Takeshi ShizukaLevels: Nobita > d[[1]][1] Nobita Takeshi ShizukaLevels: Nobita Shizuka Takeshi> d[1] name1 Nobita2 Shizuka Takeshi> d[1] name1 Nobita2 Takeshi3 Shizuka> d[1,2][1] MLevels: F MTakeshi3 Shizuka> d[1,2][1] MLevels: F M
引数と戻り値• 引数 augment
• 関数に与える設定値(パラメータとも)
• 「ひきすう」と読む
• 戻り値 return value
• 関数が返す値(計算結果とか)
4> t.test(a, na.action=T)> t.test(a, na.action=T) One Sample t-One Sample t-testdata: a t = 5.7446, df = 9, p-value = testdata: a t = 5.7446, df = 9, p-value = 0.0002782alternative hypothesis: true mean is not 0.0002782alternative hypothesis: true mean is not equal to 0 95 percent confidence interval: equal to 0 95 percent confidence interval: 3.334149 7.665851 sample estimates:mean of x 3.334149 7.665851 sample estimates:mean of x 5.5 5.5
ディレクトリ• 「なぜ ここにいる?」
• R を実行するとき,ツリー構造のどこかに必ずいる(作業ディレクトリ)
• ディレクトリ構造はツリーで表される
• 「でも僕は分からない僕はどこにいるんだ僕って何なんだ僕って何なんだ!」
• 作業ディレクトリの確認 : getwd( )
• 「僕はここにいてもいいんだ!」
• 作業ディレクトリの変更 : setwd( )
5
> getwd()[1] "/Users/haruka"> getwd()[1] "/Users/haruka"
> setwd("Dropbox/")> getwd()[1] > setwd("Dropbox/")> getwd()[1] "/Users/haruka/Dropbox"> "/Users/haruka/Dropbox"> setwd("/Users/haruka/")setwd("/Users/haruka/")
データの入出力• 入力
• read.table(“ ファイルへのパス” , header=T, sep=”,”)
• 表形式を想定
• エラーが出たら,どこかが表形式になっていない
• 出力
• write.table( オブジェクト,”出力ファイルのパス” , sep=”\t”)
6
デフォルト• こちらで指定しないと自動的に設定される引数がある(デフォルト設定)
• なんかうまくいかなかったらデフォルトをチェックしてみてもいいかも
7
read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", row.names, col.names, read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", row.names, col.names, as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA, nrows = -1, skip = as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#", allowEscapes = FALSE, flush = FALSE, comment.char = "#", allowEscapes = FALSE, flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding = "", encoding = "unknown", text)stringsAsFactors = default.stringsAsFactors(), fileEncoding = "", encoding = "unknown", text)
実行される順番• 複数のコマンドをどういう順番で実
行するか
• 逐次処理 : 普通に実行
• if 文:条件式が真であると中身を実行
• ループ制御
• for 文 : ベクトルで条件を指定
• while 文:条件式をループごとに評価する
• 制御語 : repeat, next, break
8
> a <- 1; a <- a + 1;> a[1] 2> a <- 1; a <- a + 1;> a[1] 2
> if(FALSE){1}else if(TRUE){2}else{3}[1] 2> if(FALSE){1}else if(TRUE){2}else{3}[1] 2
> x <- 0> for(i in 1:10){+ x <- x + i+ }> x[1] 55> x <- 0> for(i in 1:10){+ x <- x + i+ }> x[1] 55
> while(x>0){+ x <- x -10+ }> x[1] -5> while(x>0){+ x <- x -10+ }> x[1] -5
RStudio
• R の開発環境
• http://www.rstudio.org
• エディタでスクリプト書いてコピペするより便利
RStudio
• R の開発環境
• http://www.rstudio.org
• エディタでスクリプト書いてコピペするより便利
9
RStudio
• R の開発環境
• http://www.rstudio.org
• エディタでスクリプト書いてコピペするより便利
• コンソール : R のコマンドを実行するところ
• ワークスペース : オブジェクトが保持されているところ
9
ヘルプ• ? ほげ
• ヘルプの構造
• Description: 簡単な説明
• Usage: 使い方( formal な記述)
• Arguments: 引数(パラメタ)
• Details: 詳細な説明(補足)
• Value: どんな値を返すか
• References: 参考文献
• See Also: 関連する関数など
• Examples: 使い方の例
> ?boxplot> ?boxplot> help(boxplot)> help(boxplot)
10
ヘルプ• ? ほげ
• ヘルプの構造
• Description: 簡単な説明
• Usage: 使い方( formal な記述)
• Arguments: 引数(パラメタ)
• Details: 詳細な説明(補足)
• Value: どんな値を返すか
• References: 参考文献
• See Also: 関連する関数など
• Examples: 使い方の例
10
ヘルプ• ? ほげ
• ヘルプの構造
• Description: 簡単な説明
• Usage: 使い方( formal な記述)
• Arguments: 引数(パラメタ)
• Details: 詳細な説明(補足)
• Value: どんな値を返すか
• References: 参考文献
• See Also: 関連する関数など
• Examples: 使い方の例
10
ヘルプ• ? ほげ
• ヘルプの構造
• Description: 簡単な説明
• Usage: 使い方( formal な記述)
• Arguments: 引数(パラメタ)
• Details: 詳細な説明(補足)
• Value: どんな値を返すか
• References: 参考文献
• See Also: 関連する関数など
• Examples: 使い方の例
10