2015年5月10日日曜日

Rで順列の生成

ins=function(v,o)sapply(length(v):0,append,x=v,value=o)
perm=function(n){
  if(n==1) as.matrix(1)
  else matrix( apply(perm(n-1),2,ins,o=n) , nrow=n )
}


> perm(3)
      [,1] [,2] [,3] [,4] [,5] [,6]
 [1,]    1    1    3    2    2    3
 [2,]    2    3    1    1    3    2
 [3,]    3    2    2    3    1    1


Rの勉強のために順列の生成に挑戦した。悪戦苦闘の末、上のようなコードを編み出した。
サンプルとして表示しているのは1・2・3からなるすべての順列で、各列が1つ1つの順列をあらわす行列である。