niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

(R) R言語徹底解説 2章など

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!!