Переставить все уникальные перечисления вектора в R

I ' m пытается найти функцию, которая будет переставлять все уникальные перестановки вектора, не считая при этом сопоставления внутри подмножеств одного и того же типа элемента. Например:

dat <- c(1,0,3,4,1,0,0,3,0,4)

имеет

factorial(10)
> 3628800

возможных перестановок, но только 10! / (2! * 2! * 4! * 2!)

factorial(10)/(factorial(2)*factorial(2)*factorial(2)*factorial(4))
> 18900

уникальных перестановок при игнорировании сопоставлений внутри подмножеств одного типа элемента.

Я могу получить это, используя unique () и функцию permn () из пакета combinat

unique( permn(dat) )

, но это очень затратно в вычислительном отношении, поскольку включает перечисление n! , что может быть на порядок больше перестановок, чем мне нужно. Есть ли способ сделать это без предварительного вычисления n! ?

18
задан Aaron - Reinstate Monica 15 April 2011 в 17:59
поделиться