Rの備忘録です。
小数点の省略
「0.5」みたいな、1以下の少数は初めの「0」を省略しても大丈夫です。
> 0.5
[1] 0.5
> .5
[1] 0.5
関数の引数
検定とかで使うalternativeは「a」で良いです。
指定も”greater”とか書く必要はなくて、”t”、”g”、”l”で動きます。
(それぞれ両側(two.side)、下側(less)、上側(greater)検定。
> t.test(a,b,a="l")
Welch Two Sample t-test
data: a and b
t = -1.3668, df = 47.96, p-value = 0.08903
alternative hypothesis: true difference in means is less than 0
95 percent confidence interval:
-Inf 0.08941762
sample estimates:
mean of x mean of y
1.046161 1.439870
また、var.equalやらpaired、conf.levelなども、それぞれ「v」「p」「c」で良かったりする。
他の引数と頭文字が被ってなければ、大概は1文字で済むのです。
> matrix(1:10,nr=2,b=T)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
> log(16,b=4)
[1] 2
> print(10/3,d=2)
[1] 3.3
私はこれを知るまで、馬鹿みたいに引数を打ち込んでました。
plot関数とか、すごく楽になりますよ。
データフレームの列名の省略
最近知りましたが、データフレームの列名も省略できます。
例として、組み込みデータのOrchardSpraysについてみてみましょう。OrchardSpraysには4つ列があります。
それぞれの列の名前は以下の通り
> str(OrchardSprays)
'data.frame': 64 obs. of 4 variables:
$ decrease : num 57 95 8 69 92 90 15 2 84 6 ...
$ rowpos : num 1 2 3 4 5 6 7 8 1 2 ...
$ colpos : num 1 1 1 1 1 1 1 1 2 2 ...
$ treatment: Factor w/ 8 levels "A","B","C","D",..: 4 5 2 8 7 6 3 1 3 2 ...
特定の列だけを取り出したいときは、普通は$(ドルマーク)に変数名を入れて、以下のようにします。
> OrchardSprays$decrease
[1] 57 95 8 69 92 90 15 2 84 6 127 36 51 2 69 71 87 72
[19] 5 39 22 16 72 4 130 4 114 9 20 24 10 51 43 28 60 5
[37] 17 7 81 71 12 29 44 77 4 27 47 76 8 72 13 57 4 81
[55] 20 61 80 114 39 14 86 55 3 19
ところが、この場合、列名は初めの一文字だけでも機能します。
> OrchardSprays$d
[1] 57 95 8 69 92 90 15 2 84 6 127 36 51 2 69 71 87 72
[19] 5 39 22 16 72 4 130 4 114 9 20 24 10 51 43 28 60 5
[37] 17 7 81 71 12 29 44 77 4 27 47 76 8 72 13 57 4 81
[55] 20 61 80 114 39 14 86 55 3 19
同様に、他の列名も…
> OrchardSprays$r
[1] 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4
[37] 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
> OrchardSprays$c
[1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 5 5 5 5
[37] 5 5 5 5 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8
> OrchardSprays$t
[1] D E B H G F C A C B H D E A F G F H A E D C G B H A E C F G B D E D G A
[37] C B H F A C F G B D E H B G C F A H D E G F D B H E A C
Levels: A B C D E F G H
なんてこった。今まで一生懸命長い列名を打ち込んでいたのは何だったのか。
ちなみに、他の列名と途中まで名前が被る場合は、被らなくなるところまで書けばOKみたいです。
有名なあやめ(iris)のデータならこんな感じ。
> names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
> head(iris$Sepal.L)
[1] 5.1 4.9 4.7 4.6 5.0 5.4
> head(iris$Sepal.W)
[1] 3.5 3.0 3.2 3.1 3.6 3.9
> head(iris$Spe)
[1] setosa setosa setosa setosa setosa setosa
Levels: setosa versicolor virginica
(全部表示すると長いので、head関数で一部のみ表示)
Sepal.Lengthと書かなくても、Sepal.Lまでで機能します。
中かっこ{}の省略
for文の繰り返しや、functionで関数を書く時も、1行で済む簡単なものであれば{}を省略できます。
例えば、角度を弧度法で表す関数を作るとして、
> rad <- function(x)x*pi/180
とすれば、ちゃんと動きます。{}いりません。
> sin(rad(30))
[1] 0.5
これも、もっと早く知りたかった…
気を付けること
と、ここまで書いた省略方法は便利ですが、他の人とコードを共有する場合はご法度です。
コーディングのルールについてはHadley Wickham氏のサイトがあります。
コメント