統計Rの勉強
いまさらながら、統計ツールRの勉強をしている。
発端はPRML本の結果とJavaの結果がだいぶ違ったので、確かめてやろうとおもったこと。
前から、覚えないといけないかもなぁと思っていたこともあり、本腰を入れることにした。
で、Rのintroからまじめに読んでいくことにした。
最新版:http://cran.r-project.org/doc/manuals/R-intro.html
1.7の日本語:http://cran.r-project.org/doc/contrib/manuals-jp/R-intro-170.jp.pdf
ひとまず2章だけ。
- 基本的に行列データとその演算の集合でできてる。
- データ=オブジェクトと呼ぶ。演算=関数と呼ぶ。
- 各要素に対して普通に考えられる演算(+,-など)はできる。
- 基本的な統計量はだせる(min,max,mean,var,sumなど)。
- 演算時に要素が足りないと、勝手に保管される。便利だが要注意。
- 添え字に論理値が使える。
- 例:
#ベクトルxから5以上の値だけ取り出す x[x>5] #欠損値に0をうめておく x[is.na(x)] <- 0 #上限値以上のデータを上限値でうめておく limit <- 10 x[x>limit] <- limit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
メモ
#使ってみる(変数xに値を代入する) x <- c(10.4, 5.6, 3.1, 6.4, 21.7) assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7)) c(10.4, 5.6, 3.1, 6.4, 21.7) -> x x #内容を表示する #使ってみる(ちょっと演算) y <- c(x, 0, x) #要素は11個になる(xの要素と0とxの要素) v <- y + 1 #yの全部の要素に1を足す(裏では、一番要素数の大きなベクトルに合わせて出力を試みる。要素数が小さいベクトルは、値の繰り返しが行われて、要素数の調節されて演算される) # +, -, *, /, ^, log, exp, sin, cos, tan, sqrt #要素毎に演算 #注意:"*"は要素毎に掛け算。行列の掛け算ではない。 sum(x) #合計 min(x) #最小 max(x) #最大 mean(x) #平均 length(x) #長さ var(x) #偏差 range(x) #c(min(x), max(x))と同じ prod(x) #要素間の積 sort(x) #昇順ソート #使ってみる(順列を作る) z <- 1:30 # 1から30までのベクトルを作る z <- seq(1,30) #同じ z <- seq(from=1, to=30) z <- seq(to=30, from=1) s3 <- seq(-5, 5, by=.2) #-5から5まで0.2刻みでベクトルを作る s4 <- seq(length=51, from=-5, by=.2) #-5から0.2刻みで51個の数列を要素とするベクトルを作る z <- 2*1:30 # 1から30までのベクトルを作って2倍する n <- 10 #":"演算子は四則演算子よりも優先なので、以下は答えが違う 1:n-1 1:(n-1) s5 <- rep(x, times=5) #xベクトルを5回繰り返す s6 <- rep(x, each=5) #xの要素毎に5回繰り返す #論理演算と論理ベクトル temp <- x > 13 #xの各要素について、13より大きい場合Trueとする要素をもつ論理ベクトル #<, <=, >, >=, ==, != # c1 & c2, c1 | c2, !c1 NA #欠損値(欠損値に対する演算は全部欠損値になる) NaN #Not a number(0で割るなどでできる) is.na(x) #xの中でNAまたはNaNの要素がtrueとなるベクトル #文字列ベクトル c("X","Y") #文字列を要素単位であわせる labs <- paste(c("X","Y"), 1:10, sep="") #[1] "X1" "Y2" "X3" "Y4" "X5" "Y6" "X7" "Y8" "X9" "Y10" #添え字での要素選択 x[c(1,2,3)] x[1:3] x[c(3,2,1,2,3)] #3,2,1,2,3の順に並んだベクトル x[-(4:5)] #4から5番目を除いたベクトルを返す x[c(T,F,T,T,T)] #論理値で選択 x[!is.na(x)] #欠損値の要素を除いたベクトル #添え字に名前をつけて選択 fruit <- c(5, 10, 1, 20) names(fruit) <- c("orange", "banana", "apple", "peach") lunch <- fruit[c("apple","orange")] #xの欠損値を0に置き換える x[is.na(x)] <- 0 #使ってみる(変数を消す) objects() #変数名一覧 rm(x,y,v) #xとy,vを消す
ふう。一気に簡単なところまで読んだ。