言い表せないほどうれしい
Data Analysis
●反応時間データを例に。english.txt ヘッダー付きでファイル読み込み: read.table("english.txt", header=T) " "の中にURLを書けば、そのまま、インターネットからダウンロードできる。 ファイルの保存 english <- read.table("english.txt", header=T) a == b 同じか? a != b 違うか? > pi [1] 3.141593 デフォルトでは、少数6桁まで表示 data frame = data table 一つのvectorは同じ「型」でないといけない。 Each column is a vector. > names(english) でヘッダーが一覧が出る。 english$Word で、Wordのカラム一覧が出る。 english[english$LengthInLetters > 5,1:5] インデックス番号を書くべきところに条件を書いてしまうことができる。 文字数が5文字よりも多いものについて、1から5番のカラムを出力する。 english[(english$LengthInLetters > 5) & (english$Familiarity < 1.6),1:5] 複数の条件に合致するものを出す。&で。文字数5文字より多く、親密度が1.6未満のもの。 rownames(english) 行番号が隠れている。行番号の一覧表示。ほっておくとこれがそれぞれの行の先頭に隠されてついたままになっているので、場合によっては、クリアーして、1から行番号をつけ直して「リセット」した方が良いこともある。 rownames(english) <- c()とする。 english[1] 1列目と事実上同じ(データフレームとしてアクセス) english[1,] 1行目(1件目のデータ)(第1レコード) english[,1] 1列目にvectorとしてアクセス > head(english[1]) RTlexdec 1 6.543754 2 6.397596 3 6.304942 4 6.424221 5 6.450597 6 6.531970 > head(english[,1]) [1] 6.543754 6.397596 6.304942 6.424221 6.450597 6.531970 > nrow(english) [1] 4568 データフレームの行数 > ncol(english) [1] 36 データフレームのカラム数 > english[1,1] [1] 6.543754 > english[2,1] [1] 6.397596 > english[1,5] [1] young Levels: old young > english[1,6] [1] N Levels: N V subsetsの取り出し方 > englishsubset <- english[1:8,1:5] > > englishsubset RTlexdec RTnaming Familiarity Word AgeSubject 1 6.543754 6.145044 2.37 doe young 2 6.397596 6.246882 4.43 whore young 3 6.304942 6.143756 5.60 stress young 4 6.424221 6.131878 3.87 pork young 5 6.450597 6.198479 3.93 plug young 6 6.531970 6.167726 3.27 prop young 7 6.370586 6.123808 3.73 dawn young 8 6.266859 6.096050 5.67 dog young english[english$AgeSubject =="young" & english$LengthInLetters <=4,] 年齢が「young」で、かつ、文字数が4以下のもの。 これがいくつあるかは、 > nrow(english[english$AgeSubject =="young" & english$LengthInLetters <=4,]) [1] 1351 具体的にどんな単語はか、4つ目のカラムがwordなので、 english[english$AgeSubject =="young" & english$LengthInLetters <=4,4] rowのバインド rbind(a, b) データフレームを上下でつなげる columnのバインド cbind(x, y) データフレームを左右でつなげる asthma ぜんそく
hemophilia 血友病 blood disorder 血液疾患 dental problems 歯科疾患 latex allergy ラテックス(天然ゴム)アレルギー diabetes 糖尿病 allergies アレルギー hepatitis 肝炎 heart valve replacement 心臓弁置換 heart murmur (not requiring pre-medication) 心雑音(抗生物質などの予防投与が必要ない場合) heart murmur (requiring pre-medication) 心雑音(抗生物質などの予防投与が必要な場合) HIV/AIDS エイズ shunts or artificial joints 短絡もしくは人工結合 Other その他 診療代は、個人で歯科保険に入っている人は保険で、入ってない人は80ドル、入ってなくて全額払えない人は64ドル、まったく払えない人は補助金の申請をするように、とのこと。 また、検診とクリーニングとフッ素の塗布(そこまでが80ドル)以上の治療が必要になったら、治療をするかどうかの意思を問われる。 runif() 0から1の間で「乱数」を出してくれる。引数に指示した個数だけ出してくれる。
> runif(3) [1] 0.63095397 0.24708717 0.07877673 colors() 使える色の一覧が出る。 tagged_sentences <- c( "The:Det man:N bit:V the:Det dog:N", "Dogs:N do:Aux not:Adv like:V cats:N" ) として、データをvectorに入れておく。 strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE) strsplit()して、それをlistにいれる。 [[]]ダブルブラケットで、list内の「要素」を指定する。 $をつけて「要素」内のどちらかを指定する。 > list(word="man", tag="N") $word [1] "man" $tag [1] "N" strsplit(tagged_sentences, " ") parse <- function (words) { ss <- strsplit(words, ":") named <- list() for (i in 1:length(ss)){ named[[i]] <- list(word=ss[[i]][1], tag=ss[[i]][2]) } named } maketag <- function (vec){ list(word=vec[1], tag=vec[2]) } lapply(X, 関数) あるリストXのすべてに対して「関数」を適用して、その結果をリストで返す。 list には、キー と 値 をセットで入れる。単語と品詞とか。 > mylist <- list(word="the", tag="Det") > mylist $word [1] "the" $tag [1] "Det" > mylist$word [1] "the" > mylist$tag [1] "Det" > mylist[[1]] [1] "the" > mylist[[2]] [1] "Det" 院生が講師として講義をしている。 非常にRのことを良く知っているということはよくわかるが、、、 わかる人はわかるけど、 わからない人はわからない、という講義。 x <- 1:10 # x に1から10いれてあるとして
for (i in 1:length(x)){ # 1からxの要素数までの範囲について、順に i にいれていく。 cat(x[i],"\n") # 要素番号を指定してxの要素につづけて、改行記号を出力していく。 } 1 2 3 4 5 6 7 8 9 10 matrixを使わずに、インデックスを二つ(i, j)使い、ループを二重にして、listと同じ処理をする。 1)ベクトル c() Perlでいう配列 2)行列 matrix() Perlでいう2次元配列 matrix(1:6, nrow=2, ncol=3) matrix(1:6, 2, 3) 3)配列 array() Perlでいう多次元配列 arrray(要素, 次元) 4)リスト list() データをまとめたもの(オブジェクト) 一連のものを複数に条件分けしていく。 for (){ if(){ }else{ }else{ }else{ } } seq(開始値, 終止値, by=間隔値) > seq(0, 3, by=0.5) [1] 0.0 0.5 1.0 1.5 2.0 2.5 3.0 x <- 1:10 i <- 1 while(i <= length(x)){ if(x[i] %% 2 == 0){ cat(x[i], " is EVEN.\n") } else{ cat(x[i], " is ODD.\n") } i <- i + 1 } ●forを使って i <- 0 x <- 10:20 x length(x) for (i in 1:length(x)){ if ( x[i] %% 2 == 0){ cat(x[i], " is EVEN.\n") } else{ cat(x[i], " is ODD.\n") } } return(i)で、値を返して終わる。 昨日の夕方から雪で、小学校は2時間早く終わって、
今朝は、2時間遅れで授業開始。 ---------------------------------------- Dear Parents, Because of the impending snow, school is dismissing two hours early today. Students will be dismissed at 11:55 a.m. ---------------------------------------- Wednesday, January 12, 2011 - Schools will open two hours late. ---------------------------------------- 二通りの出力の方法
> cat("foo") foo > print("foo") [1] "foo" > cat(c(1,2,3)) 1 2 3 > print(c(1,2,3)) [1] 1 2 3 > cat(c("A", "vector", "of", "words")) A vector of words > print(c("A", "vector", "of", "words")) [1] "A" "vector" "of" "words" グラフをあらためて書くとき dev.off() plot.new() の二つを使う。いつも使うので、まとめて一つにしておくと便利。 newg <- function () { if (dev.cur() > 1) { dev.off() } plot.new() } ブール演算 & | 「かつ」 > (1:10 > 2) & (1:10 < 7) [1] FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE 「もしくは」 > (1:10 > 2) | (1:10 < 7) [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 条件もし print_hello7 <- function (x) { if (x > 7) { cat("Hello.\n"); } } 条件もしくは print_hello7_2 <- function (x) { if (x > 7) { cat("Hello number greater than 7.\n") } else { cat("Hello number less than or equal to 7.\n") } } 途中でとめるには、Esc while(){}でループ マックの場合、半角¥は、半角¥に変換される。 バックスラッシュにするには、optionを押しながら¥。 i <- 0 while (i < 10){ cat("Hello.\n") i <- i + 1 } factorial 階乗 4! = 4x3x2x1 product 積 10個の要素、各要素は、要素番号の2倍に12を足したものにする。 i <- 1 while ( i < 11) { v[i] <- i*2+12 i <- i + 1 } 戻り値 return 書かずに、そのまま変数名を書いてしまう人も多い。 奇数偶数の判別 odd_even <- function(x){ if (x %% 2 == 0){ cat(x,"is EVEN.\n") } else{ cat(x,"is ODD.\n") } } debug() デバッグする |