メモ:行列を列ごと・行ごとのベクトルのリストに変換したいときはsplit()にcol()/row()
combn()
は行列を返すけど、ベクトルのリストを返してほしいんだよなー、と思っていろいろ調べてた時のメモ。
col()
/row()
でそれぞれ列と行のインデックスが取れるので、これをsplit()
に渡せば分割できる。簡単ですね。
こういう感じ。
x <- combn(letters[1:3], 2) x #> [,1] [,2] [,3] #> [1,] "a" "a" "b" #> [2,] "b" "c" "c" split(x, col(x)) #> $`1` #> [1] "a" "b" #> #> $`2` #> [1] "a" "c" #> #> $`3` #> [1] "b" "c" split(x, row(x)) #> $`1` #> [1] "a" "a" "b" #> #> $`2` #> [1] "b" "c" "c"
ほんとうにやりたかったのはこっちだけど、character(0)
が消えてしまうのは何かしら対処が必要。
x <- lapply(0:2, function(m) combn(letters[1:3], m)) x #> [[1]] #> [,1] #> #> [[2]] #> [,1] [,2] [,3] #> [1,] "a" "b" "c" #> #> [[3]] #> [,1] [,2] [,3] #> [1,] "a" "a" "b" #> [2,] "b" "c" "c" x <- lapply(x, function(x) { split(x, col(x)) }) unname(unlist(x, recursive = FALSE)) #> [[1]] #> [1] "a" #> #> [[2]] #> [1] "b" #> #> [[3]] #> [1] "c" #> #> [[4]] #> [1] "a" "b" #> #> [[5]] #> [1] "a" "c" #> #> [[6]] #> [1] "b" "c"