[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
>>>> PLEASE do read the posting guide! http://www.R-project.org/posting-
>>>> 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
>> PLEASE do read the posting guide! http://www.R-project.org/posting-
>> guide.html
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-
> guide.html
--
Robin Hankin
Uncertainty Analyst
National Oceanography Centre, Southampton
European Way, Southampton SO14 3ZH, UK
tel 023-8059-7743
More information about the R-help
mailing list