[R] Permutations

Rolf Turner rolf at math.unb.ca
Tue Jul 13 22:02:25 CEST 2004


Marc Schwartz wrote (in response to a question from Jordi Altirriba):

> You can use the permutations() function in the 'gregmisc' package on
> CRAN:
> 
> # Assuming you installed 'gregmisc' and used library(gregmisc)
> # First create 'groups' consisting of the four blocks
> groups <- c("1 2 3", "4 5 6", "7 8 9", "10 11 12")
> 
> # Now create a 4 column matrix containing the permutations
> # The call to permutations() here indicates the number of blocks in
> # groups (4), the required length of the output (4) and the vector of
> # elements to permute
> perms <- matrix(permutations(4, 4, groups), ncol = 4)
> 
> > perms
>       [,1]       [,2]       [,3]       [,4]      
>  [1,] "1 2 3"    "10 11 12" "4 5 6"    "7 8 9"   
>  [2,] "1 2 3"    "10 11 12" "7 8 9"    "4 5 6"   
>  [3,] "1 2 3"    "4 5 6"    "10 11 12" "7 8 9"   
>  [4,] "1 2 3"    "4 5 6"    "7 8 9"    "10 11 12"
>  [5,] "1 2 3"    "7 8 9"    "10 11 12" "4 5 6"   
>  [6,] "1 2 3"    "7 8 9"    "4 5 6"    "10 11 12"
>  [7,] "10 11 12" "1 2 3"    "4 5 6"    "7 8 9"   
>  [8,] "10 11 12" "1 2 3"    "7 8 9"    "4 5 6"   
>  [9,] "10 11 12" "4 5 6"    "1 2 3"    "7 8 9"   
> [10,] "10 11 12" "4 5 6"    "7 8 9"    "1 2 3"   
> [11,] "10 11 12" "7 8 9"    "1 2 3"    "4 5 6"   
> [12,] "10 11 12" "7 8 9"    "4 5 6"    "1 2 3"   
> [13,] "4 5 6"    "1 2 3"    "10 11 12" "7 8 9"   
> [14,] "4 5 6"    "1 2 3"    "7 8 9"    "10 11 12"
> [15,] "4 5 6"    "10 11 12" "1 2 3"    "7 8 9"   
> [16,] "4 5 6"    "10 11 12" "7 8 9"    "1 2 3"   
> [17,] "4 5 6"    "7 8 9"    "1 2 3"    "10 11 12"
> [18,] "4 5 6"    "7 8 9"    "10 11 12" "1 2 3"   
> [19,] "7 8 9"    "1 2 3"    "10 11 12" "4 5 6"   
> [20,] "7 8 9"    "1 2 3"    "4 5 6"    "10 11 12"
> [21,] "7 8 9"    "10 11 12" "1 2 3"    "4 5 6"   
> [22,] "7 8 9"    "10 11 12" "4 5 6"    "1 2 3"   
> [23,] "7 8 9"    "4 5 6"    "1 2 3"    "10 11 12"
> [24,] "7 8 9"    "4 5 6"    "10 11 12" "1 2 3"   

This does not solve the problem that was posed.  It only permutes the
blocks, and does not allow for swapping between blocks.  For instance
it does produce the ``acceptable'' permutation

	1 2 4 | 3 5 6 | 7 8 9 | 10 11 12   YES-----2nd permutation

I would guess that a correct solution is likely to be pretty
difficult.  I mean, one ***could*** just generate all 12!
permutations of 1 to 12 and filter out the unacceptable ones.  But
this is getting unwieldy (12! is close to half a billion) and is
inelegant.  And the method does not ``generalize'' worth a damn.

				cheers,

					Rolf Turner
					rolf at math.unb.ca




More information about the R-help mailing list