# [R] combinatorics again

Robin Hankin r.hankin at noc.soton.ac.uk
Mon Mar 6 10:48:58 CET 2006

```Patrick, Uwe

thanks!

[both your solutions were conceptually identical, except for one
was "ascending" and one was "descending"]

very best wishes

Robin

On 6 Mar 2006, at 09:36, Uwe Ligges wrote:

> Robin Hankin wrote:
>
>> Thank you Jacques
>>
>> but your solution  misses (eg) c(1,1,2) which I need.
>
> See ?combinations which should point you to
>
> combinations(5,3, repeats.allowed=TRUE)
>
> Best,
> Uwe
>
>
>
>> best wishes
>>
>> Robin
>>
>>
>>
>> On 6 Mar 2006, at 09:17, Jacques VESLOT wrote:
>>
>>
>>>> library(gtools)
>>>> combinations(5,3)
>>>
>>>     [,1] [,2] [,3]
>>> [1,]    1    2    3
>>> [2,]    1    2    4
>>> [3,]    1    2    5
>>> [4,]    1    3    4
>>> [5,]    1    3    5
>>> [6,]    1    4    5
>>> [7,]    2    3    4
>>> [8,]    2    3    5
>>> [9,]    2    4    5
>>> [10,]    3    4    5
>>>
>>>
>>> Robin Hankin a écrit :
>>>
>>>
>>>> Hi
>>>>
>>>> I want to enumerate all vectors of length "J", whose elements are
>>>> integers in the range 1 to S, without regard to ordering.
>>>>
>>>> With J=S=3, the combinations are as follows:
>>>>
>>>>
>>>>       [,1] [,2] [,3]
>>>> [1,]    1    1    1
>>>> [2,]    1    1    2
>>>> [3,]    1    1    3
>>>> [4,]    1    2    2
>>>> [5,]    1    2    3
>>>> [6,]    1    3    3
>>>> [7,]    2    2    2
>>>> [8,]    2    2    3
>>>> [9,]    2    3    3
>>>> [10,]    3    3    3
>>>>
>>>>
>>>> Note that (eg) c(1,2,1) is not on the list because we already have
>>>> c(1,1,2) which would be equivalent [because the problem is to
>>>> enumerate the cases without regard to ordering] and I do not want
>>>> repeats.
>>>>
>>>> The best I can do is to create all S^J possibilities and weed
>>>> out the
>>>> repeats, using unique() ; code below.
>>>>
>>>> Why is this no good?  Well, even for the tiny case of J=S=10, this
>>>> would require a matrix of 10^10 rows, and my little linux machine
>>>> refuses to cooperate, complaining about allocating a vector of
>>>> length 1410065408.  For these values of J and S, I happen to know
>>>> that the are 6360 distinct combinations, which is eminently
>>>> handleable.
>>>>
>>>>
>>>> Anyone got any better ideas?
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> allcomb <- function(J,S){
>>>>
>>>>  f <- function(...) {
>>>>    1:S
>>>>  }
>>>>  out <- as.matrix(do.call("expand.grid", lapply(1:J, FUN = f)))
>>>>  out <- t(apply(out,1,sort))
>>>>  unique(out)
>>>> }
>>>>
>>>>
>>>> --
>>>> Robin Hankin
>>>> Uncertainty Analyst
>>>> National Oceanography Centre, Southampton
>>>> European Way, Southampton SO14 3ZH, UK
>>>> tel  023-8059-7743
>>>>
>>>> ______________________________________________
>>>> R-help at stat.math.ethz.ch mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>> guide.html
>>>>
>>>>
>>
>>
>> --
>> Robin Hankin
>> Uncertainty Analyst
>> National Oceanography Centre, Southampton
>> European Way, Southampton SO14 3ZH, UK
>>   tel  023-8059-7743
>>
>> ______________________________________________
>> R-help at stat.math.ethz.ch mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> guide.html
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> guide.html

--
Robin Hankin
Uncertainty Analyst
National Oceanography Centre, Southampton
European Way, Southampton SO14 3ZH, UK
tel  023-8059-7743

```