2章だけでも結構学びがあります…。
matrix, array
matrixとarrayをあまり使ってなかったので触ってみる。
matrixは行列、arrayは配列と訳されていますね。そして、matrixは次元が2のarrayなので(そうだったのか…)
identical(array(1:6, c(2,3)), matrix(1:6, ncol=3, nrow=2)) # [1] TRUE
とすると一致しますね。
ということで、matrixであればarrayであるが、逆は必ずしも成り立たない
is.array(array(1:12, c(2,3,2))) # [1] TRUE is.matrix(array(1:12, c(2,3,2))) # [1] FALSE
2.3.1節のエクササイズ2はこういうことですかね。
is.vector
先の記事のリンク先に貼ってあったslackのやりとりから、attributeつきのオブジェクトに対して、is.vectorはFALSEを返すとのこと、やってみると
a <- 1:10 is.vector(a) # [1] TRUE
はい。まぁこれは良しとして。
names(a) <- letters[1:10] attributes(a) # $names # [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" is.vector(a) # [1] TRUE
ふむ。名前をつけても大丈夫そうです。しかし、
attr(a, "ss") <- "hhh" a # a b c d e f g h i j # 1 2 3 4 5 6 7 8 9 10 attr(,"ss") # [1] "hhh" is.vector(a) # [1] FALSE
おっと、FALSE。なるほど…。
しかし、
is.atomic(a) # [1] TRUE
なので、Hadleyの書いたように
is.atomic(a) || is.list(a) # [1] TRUE
で良いわけですね。
slackのやり取りのもう一方のexpressionについて。
is.vector(expression()) # [1] TRUE
なるほど。しかし、
is.atomic(expression()) || is.list(expression()) # [1] FALSE
となるので、expressionはベクトルに入れないの?という話になるわけですね。expressionが出てくるのはまだ先なのでとりあえずここでは触れないことに。
とりあえずここまで。少しずつやっていきましょう。
Enjoy!!