R:生成没有重复元素的矢量的所有排列

Slo*_*ner 12 r

是否有一种直接的方法来生成一个整数向量(1到最大999)的所有可能的排列,这些排列明确地排除了重复的元素?

例如,对于具有1到9范围内的三个元素的向量,序列1 2 3将是可接受的,1 2 9但是1 2 2将是无效的.序列必须包含确切的n元素(在本例中为三个).编辑:为了避免混淆,订单很重要,因此1 2 9并且9 2 1都是有效的和必需的.

关于使用R on SO(例如thisthis)的排列和组合有很多问题,但似乎没有一个适合这种特殊情况.我希望有一个不起眼的基础R或包功能,它将照顾它,而我自己不必写一个没有优势的功能.

Aru*_*run 23

使用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)
Run Code Online (Sandbox Code Playgroud)


And*_*rie 10

编辑:这不是OP要求的,但我留下这个答案,以避免混淆.

我的数学有点生疏,但我认为你在描述组合,而不是排列.基函数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
Run Code Online (Sandbox Code Playgroud)

之间的区别combinations,并permutations是在combinations该顺序并不重要.所以,(2, 3, 4)并且(4, 3, 2)是相同的组合,但是不同的排列.

  • @SlowLearner,你应该读下列.所以,你在寻找组合..? (2认同)

Car*_*oft 9

utils::combn ; combinat::combn或者combinat::permn 是替代品.