applyの普通じゃない(?)ような使い方

R苦手の会で説明したんだけど、なんとなくBlogでも書いてみる。こんな風なcsvファイルがあったとする。

hoge, 2
fuga, 3
piyo, 1

これは文章中にhogeが2回、fugaが3回、piyoが1回出てきたというようなものを表わしている。ここで、このcsvの情報から単語の登場回数の密度推定をやって欲しいとか言われたとする(ex:自然言語処理特論)。この情報から密度推定をしようと思うと、Rなら次のようなベクトルが必要になる。

c(hoge, hoge, fuga, fuga, fuga, piyo)

で、このベクトルを作るのにapplyを使ってみた。こんな感じ。

word <- c("hoge", "fuga", "piyo");
count <- c(2, 3, 1);
d <- data.frame(word, count);
unlist(apply(d, 1, function(x){rep(x[1], x[2])}), use.names = FALSE)

それだけ。行指向なデータにapplyをときどきこんな感じで使ったりしている。