【目次】
•すべての組み合わせのパターンを発生させる。
•すべての順列のパターンを発生させる。
すべての組み合わせのパターンを発生させる。
統計学やネットワーク解析において、順列や組み合わせのすべてのパターンを発生させたいことがあります。
まずは、組み合わせの発生のさせ方から見ていきます。
例えば、「白」「黒」「青」「赤」の4つの色から、2つを選ぶ組み合わせをすべて列挙したいとします。
4つの中から2つを選ぶ組み合わせは、通りですから、この6パターンすべてを羅列してみます。
ちなみに、Rで組み合わせが何パターンあるかは、choose()関数で以下のように求めることができます。
choose(n=4,k=2)
[1] 6
そして、この6パターンをすべて表示させるにはcombn()関数を利用して以下のように記述します。
combn(x=c("白","黒","青","赤"),m=2)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] “白” “白” “白” “黒” “黒” “青”
[2,] “黒” “青” “赤” “青” “赤” “赤”
このように、縦に6列ですべてのパターンを発生させることができました。
すべての順列のパターンを発生させる。
次にすべての順列のパターンを発生させる方法です。
前述の例と同じように「白」「黒」「青」「赤」の4つの色から、2つを選んで、順番も加味した上でのパターン、つまり通りのすべてのパターンを発生させてみましょう。
ちなみに、順列が何通りあるかを計算する関数は、Rのデフォルトでは筆者が知る限りないので、自分で作ってみました。
# 順列が何通りあるかを計算する関数 perm <- function(n,k){choose(n,k) * factorial(k)}
この関数を利用して、は以下の通り12パターンあると計算できます。
[1] 12
それでは、この12通りをすべて発生させる方法です。色々なパッケージがあるので、今回はgtoolsというパッケージを使ってみます。
まずは、以下のようにパッケージをインストールして、使える状態にしましょう。
# 順列を列挙する関数permutationsを含むパッケージ # gtoolsをインストール。 install.packages("gtools") library(gtools)
インストールして使える状態になったら、以下のプログラムで順列のパターンをすべて列挙することができます。
permutations(n=4,r=2,v=c("白","黒","青","赤"),repeats.allowed = F)
以下のように横12列に12パターンすべてを列挙しています。
[,1] [,2]
[1,] "白" "赤"
[2,] "白" "青"
[3,] "白" "黒"
[4,] "赤" "白"
[5,] "赤" "青"
[6,] "赤" "黒"
[7,] "青" "白"
[8,] "青" "赤"
[9,] "青" "黒"
[10,] "黒" "白"
[11,] "黒" "赤"
[12,] "黒" "青"