統計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を消すふう。一気に簡単なところまで読んだ。