generic vector
Rのドキュメントを見ると、listの説明として、"Generic Vectors"という言葉が出てくる。https://www.rdocumentation.org/packages/base/versions/3.4.3/topics/list
んー、なんだこれ。と思ったんだけど、vector関数の挙動を見たら、なんとなくわかったような気がする。
atomic vectorとgeneric vector
まず、すべてデフォルト値で初期化された数値ベクトルを作るにはこうする。v <- vector(mode = "numeric", length = 2) v [1] 0 0
numericのデフォルト値(0)で、長さ2のベクトルが作られる。
一方、modeを"list"にすると、デフォルト値(0)で、長さ2のリストが作られる。
l <- vector(mode = "list", length = 2) l [[1]] NULL [[2]] NULL
Rでは、最初の例のような、vectorの中にvectorを持たない連続データ構造(いわゆる配列)を"atomic vector"、2つ目の例のようにvectorの中にvectorを持つデータ構造(いわゆる配列の配列)を"generic vector"と呼ぶ。
https://www.rdocumentation.org/packages/base/versions/3.4.3/topics/vector
ただし、ただ"vector"と言った場合は"atomic vector"、"list"と言った場合は"generic vector"を指しているみたい。
vector関数
さて、先ほどのvector関数だけど、modeやlengthを指定しなかった場合はどうなっちゃうんだろうか。vemp <- vector() vemp logical(0) length(vemp) [1] 0
これは以下のように、vector(mode = "logical", length = 0) としているのと同じになる。
vemp <- vector(mode = "logical", length = 0) vemp logical(0)
lengthだけを指定すると、logicalのデフォルト値であるFALSEになる。
vemp <- vector(length = 2) vemp [1] FALSE FALSE
vectorとlistの相互変換
as.listを使って、ベクトルをリストに変換したり、as.vectorを使って、リストをベクトルに変換することもできる。v <- c(4, 5, 6) as.list(v) [[1]] [1] 4 [[2]] [1] 5 [[3]] [1] 6 l <- list("a" = 1, "b" = 2, "c" = 3) as.vector(l, mode = "numeric") [1] 1 2 3
0 件のコメント:
コメントを投稿