17

重複した要素を明確に除外する整数のベクトル (1 から最大 999) のすべての可能な順列を生成する簡単な方法はありますか?

たとえば、1 ~ 9 の範囲の 3 つの要素を持つベクトルの場合、シーケンス1 2 3は許容されます1 2 91 2 2、無効になります。シーケンスには正確にn要素 (この場合は 3 つ) が含まれている必要があります。編集:混乱を避けるために、順序は重要であるため1 2 9、 と9 2 1は両方とも有効で必須です。

SO で R を使用する順列と組み合わせ ( thisthisなど) については多くの質問がありますが、この特定のケースに当てはまると思われるものはありません。自分で優雅な関数を書かなくてもそれを処理できる、あいまいなベース R またはパッケージ関数がそこにあることを願っています。

4

3 に答える 3

29

gtoolsパッケージの使用:

require(gtools)
permutations(n = 9, r = 3, v = 1:9)
# n -> size of source vector
# r -> size of target vector
# v -> source vector, defaults to 1:n
# repeats.allowed = FALSE (default)
于 2013-02-05T09:29:34.033 に答える
11

utils::combn ; combinat::combnまたはcombinat::permn 代替手段です。

于 2013-02-05T13:14:58.757 に答える
10

編集:これはOPが要求したものではありませんが、混乱を避けるためにこの回答を残します。

私の数学は少しさびていますが、順列ではなく組み合わせを説明していると思います。base 関数combn()は組み合わせを返します。

ベクトルから、長さ 3 のすべての組み合わせを扱いやすいセットで説明し1:4ます。

combn(4, 3)
     [,1] [,2] [,3] [,4]
[1,]    1    1    1    2
[2,]    2    2    3    3
[3,]    3    4    4    4

combinationsとの違いpermutationscombinations、順序は関係ないということです。(2, 3, 4)(4, 3, 2)は同じ組み合わせですが、順列が異なります。

于 2013-02-05T09:33:25.703 に答える