最近知ったんですが、Rで順列(Permutation)や、組み合わせ(Combination)を計算するデフォルトの関数ってないんですね。
【2016年11月18日追記 開始】
勘違いしていました。訂正します。
組み合せの数を計算するchooseという関数があります。
例えば、4個から2個選ぶ組み合わせの数は
> choose(4,2)
[1] 6
みたいな感じで求めることができます。
【2016年11月18日追記 終了】
そういうパッケージはあるみたいですけど、わざわざパッケージを使うまでもないような気もしないでもないです。
高校数学を復習する意味でも、自分で実装してみましょう。
まず、順列。
n個の中からk個を取り出して、順番を意識して並べていくような場合の数ですね。
nから初めて、1ずつ減らしながら、r個分かければ計算できます。
n × (n-1) × (n-2) × ... × {n-(r-2)} × {n-(r-1)}
上記をやりたい場合、受け取った引数を全部かけてくれるprodという関数が使えます。1ずつ減っていく引数は、 ":" (コロン)を使えばよさそうですね。
ということで、
prod(n:(n-r+1))
とやればいいのですが、これだと r が 0 のときにうまくいきません。0個を選び出す順列の数は 1 なので、関数にしてしまって、↓こんな感じで、どうでしょうか?
# 順列を計算する関数定義
Permu <- function(n, r){
ifelse( r==0, 1, prod(n:(n-r+1)) )
}
動作確認してみましょう。
> Permu(4, 0)
[1] 1
> Permu(4, 1)
[1] 4
> Permu(4, 2)
[1] 12
> Permu(4, 3)
[1] 24
> Permu(4, 4)
[1] 24
うん、よさそうです。
次は、組み合わせ。
nからr個選ぶ順列を、rの階乗で割れば(r個の順番を無視する)、OKですね。
階乗はfactorialという関数があるので、そのまま使えます。
こちらも関数定義にしてみましょう。
# 組み合わせを計算する関数定義
Combi <- function(n, r){
Permu(n, r)/factorial(r)
}
こちらも動作確認してみましょう。
> Combi(4, 0)
[1] 1
> Combi(4, 1)
[1] 4
> Combi(4, 2)
[1] 6
> Combi(4, 3)
[1] 4
> Combi(4, 4)
[1] 1
うん、よさそうです。
Jammin' Jars Casino Hotel & Spa - KTM Hub
返信削除Jars Casino Hotel & 안양 출장마사지 Spa features 안동 출장샵 an outdoor pool, 광양 출장샵 a private outdoor 오산 출장안마 pool and a Jacuzzi. Jars Casino Hotel & Spa is located on 강릉 출장샵 the waterfront of