[R] combinatorics

(Ted Harding) Ted.Harding at nessie.mcc.ac.uk
Fri Oct 13 18:40:24 CEST 2006


On 13-Oct-06 Robin Hankin wrote:
> Hi
> 
> How do I generate all ways of ordering  sets of indistinguishable
> items?
> 
> suppose I have two A's, two B's and a C.
> 
> Then I want
> 
> AABBC
> AABCB
> AACBC ---->> I think you mean AACBB here!
> ABABC
> . . .snip...
> BBAAC
> . . .snip...
> CBBAA
> 
> [there are 5!/(2!*2!) = 30 arrangements.  Note AABBC != BBAAC]
> 
> How do I do this?

I've tried to think of an efficient and economical (and therefore
clever) way of doing this for larger problems; but that will have
to wait for another day!

Meanwhile, a problem of the order of the one you describe above
can be solved quite slickly:

X<-c("A","A","B","B","C")
library(combinat)

##[result below stripped of " quotes for clarity]
unique(array(permn(X)))
[[1]]
 [1]   A A B B C
[[2]]
 [1]   A A B C B
[[3]]
 [1]   A A C B B
[[4]]
 [1]   A C A B B
[[5]]
 [1]   C A A B B
[[6]]
 [1]   A B A B C
[[7]]
 [1]   A B A C B
[[8]]
 [1]   A B C A B
[[9]]
 [1]   A C B A B
[[10]]
 [1]   C A B A B
[[11]]
 [1]   C B A A B
[[12]]
 [1]   B C A A B
[[13]]
 [1]   B A C A B
[[14]]
 [1]   B A A C B
[[15]]
 [1]   B A A B C
[[16]]
 [1]   B A B A C
[[17]]
 [1]   B A B C A
[[18]]
 [1]   B A C B A
[[19]]
 [1]   B C A B A
[[20]]
 [1]   C B A B A
[[21]]
 [1]   C A B B A
[[22]]
 [1]   A C B B A
[[23]]
 [1]   A B C B A
[[24]]
 [1]   A B B C A
[[25]]
 [1]   A B B A C
[[26]]
 [1]   B B A A C
[[27]]
 [1]   B B A C A
[[28]]
 [1]   B B C A A
[[29]]
 [1]   B C B A A
[[30]]
 [1]   C B B A A

However, the above simple function will quickly get short
of breath if the total number of items gets much above, say 10.

Hoping this helps!
Ted.

--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at nessie.mcc.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 13-Oct-06                                       Time: 17:40:20
------------------------------ XFMail ------------------------------



More information about the R-help mailing list