[R] combinatorics again
Jacques VESLOT
jacques.veslot at cirad.fr
Mon Mar 6 10:46:24 CET 2006
combinations(5,3,rep=T)
Robin Hankin a écrit :
> Thank you Jacques
>
> but your solution misses (eg) c(1,1,2) which I need.
>
> 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
>
>
More information about the R-help
mailing list