すでに説明したように、順列の数は次のように計算できます。
R> choose(40,20)
[1] 137846528820
ただし、R が現在処理できる最長のベクトルは 2^31 - 1 要素の長さです。つまり、次のようになります。
R> 2^31 - 1
[1] 2147483647
これは、生成する順列の数よりもはるかに少ないです。したがって、これらの順列を生成するために標準関数でこれを試した場合に得られるエラーとエラーcombn():
R> combn(40, 20)
Error in matrix(r, nrow = len.r, ncol = count) :
invalid 'ncol' value (too large or NA)
In addition: Warning message:
In combn(40, 20) : NAs introduced by coercion
この時点で、お風呂のような方法で順列を生成し、R の多くのビッグデータ パッケージの 1 つを調査するコードを作成する必要があります (ハイ パフォーマンス コンピューティングのタスク ビューを参照してください)。
または、これは私の提案ですが、1,370億で何ができるかを考えてみてください! (アメリカの)順列を変更してから、別のアプローチを取ります。1 秒に 1 を処理できた場合 (つまり、1 秒かかった順列で意味のあることを行う場合)、4000 年後の結果にまだ取り組んでいることになります!
では、なぜすべての順列が必要なのですか? より小さなランダムセットで十分でしょうか?