niszetの日記

10年目エンジニアが最近勉強したことを忘れないようにメモをする

(R) R言語徹底解説 3章 手を動かす編1

引き続き。

2章の書き残し。

str, class, typeof, is., attributes の関数は覚えておくと良い。データに詳しくなれる。 代入の式、(<-) はその式を()で囲うと値が表示される。これに限らず、invisibleになっている関数の返却値は()で囲えば見れるようになるのでこれも覚えておくと良い。

3章。

データの抽出。

(x <- c(2.1, 4.2, 3.3, 5.4))
# [1] 2.1 4.2 3.3 5.4

整数を与えるとその番号の要素が得られる(Rは1からはじまる)が、NAを入れるとNAが返ってくる。

x[c(1,NA)]
# [1] 2.1  NA

これは書かれてなかったが、NAだけを与えると、全要素NAになって返ってくる。

x[c(NA)]
# [1] NA NA NA NA

これはNAがlogicalであることからきているのですが、これについて調べていて自分の理解が間違っていたことに気づいたので書いておく。 とりあえず。

(x <- c(1,2,3,4,5)) # ()で囲うと代入した値が表示される
# [1] 1 2 3 4 5

要素を抜き出すとき、

x[c(1,2)]
# [1] 1 2

というように、indexを指定する形で値を抜き出すことができますね。 T(TRUE)/F(FALSE)でも対応する要素を抜き出せますが、例えば下記のようにすると

x[c(T,F)]
# [1] 1 3 5

これはx[c(T,F,T,F,T)]の結果ですね。logicalの場合はリサイクル規則は相手の要素数を超えない範囲で繰り返されるのか…

NAだけの場合はlogicalで与えているのでリサイクルされて全要素がNAになる。他の数字といると型変換でNA_realかNA_integerに変換(前の例ではNA_real_になる。数字は1Lのように明示的にLをつけないとintegerとならない。typeof(1)typeof(1L)などで確認できる。

ちなみに、範囲外ならNA

x[6]
# [1] NA

となる。

この挙動はlistやdata.frameでも異なるので注意が必要だ…。

全然3章の中身に触れられていませんが、とりあえずここらで一度区切り。

Endoy!!