直積集合 (追記:expand.grid)
2012/09/20 追記
R Tips 第2版を購入して読んでいたら、expand.gridなる関数があるじゃないですか・・・。
The R Tips―データ解析環境Rの基本技・グラフィックス活用集
ということで、下でやっていることはexpand.grid関数でできます。
ああ、もっと検索力が欲しい。
Rで直積集合を求める関数が見つからなかったので自作。
任意個の名前付きベクトルを受け取って、直積集合のデータフレームを返す。
direct.product <- function(...) { xs <- list(...) n <- length(xs) ns <- cumprod(sapply(xs, length)) lapply(1:n, function(i) { times <- if(i > 1) ns[i-1] else 1 each <- ns[n] / ns[i] xs[[i]] <<- rep(xs[[i]], times=times, each=each) }) data.frame(xs) }
使用例
> direct.product(x=1:3, y=4:5, z=6:8) x y z 1 1 4 6 2 1 4 7 3 1 4 8 4 1 5 6 5 1 5 7 6 1 5 8 7 2 4 6 8 2 4 7 9 2 4 8 10 2 5 6 11 2 5 7 12 2 5 8 13 3 4 6 14 3 4 7 15 3 4 8 16 3 5 6 17 3 5 7 18 3 5 8