名前付きベクトルの挙動

ひとりアドベントカレンダー2日目。
以下のコードの実行結果は皆さん予想できるだろうか。

x1 <- c(a=1, a=2, a=3, b=1, b=2, b=3)
x2 <- c(a=1:3, b=4:6)

結果はこちら。

> x1
a a a b b b 
1 2 3 1 2 3 
> x2
a1 a2 a3 b1 b2 b3 
 1  2  3  4  5  6 

今度はこちらのコードだとどうだろうか。

y <- rep(letters[1:3], c(2, 1, 3))
z <- c(a="hoge", b="hoge", c="hage")
res <- z[y]

結果はこちら。
名前付きベクトルを使うことでmergeができる。

> res
     a      a      b      c      c      c 
"hoge" "hoge" "hoge" "hage" "hage" "hage" 

名前付きベクトルの挙動については、意外と皆さん知らないのではないだろうか。だいたいデータフレームしか触らないだろうし。
この辺の挙動はAdvanced Rに詳しい。
そして、へえ、邦訳が出るんだ。へえ。

R言語徹底解説

R言語徹底解説

なお、名前付きベクトルを使ったmergeの解説は以下の記事に詳しい。
Advanced Rより詳しい。
名前付きベクトルを使うとmergeの400倍速いらしい。
http://d.hatena.ne.jp/a_bicky/20140713/1405211663