[R] generate combination multiset (set with repetition)

baptiste auguie ba208 at exeter.ac.uk
Thu Dec 11 18:53:11 CET 2008


Hi,

Perhaps you can use expand.grid and then remove the mirror combinations,

> values <- 1:3
> tmp <- expand.grid(values, values)
> unique.combs <- tmp[tmp[, 1]<=tmp[, 2], ]
> unique.combs[do.call(order, unique.combs), ] # reorder if you wish
>   Var1 Var2
> 1    1    1
> 4    1    2
> 7    1    3
> 5    2    2
> 8    2    3
> 9    3    3

I vaguely recall a discussion a few months ago on extending this  
approach to a variable number of arguments to expand.grid.

Hope this helps,

baptiste

On 11 Dec 2008, at 17:00, Reuben Cummings wrote:

> Hi,
>
> This has been asked before but not sufficiently answered from what I
> could find. How do you create combinations
> with repetitions (multisets) in R?
>
> If I have
>> set <- array(1:3)
>
> And I want to choose all combinations of picking 2 numbers, I want to
> get a print out like
>
>     [,1] [,2]
> [1,]    1    1
> [2,]    1    2
> [3,]    1    3
> [4,]    2    2
> [5,]    2    3
> [6,]    3    3
>
> subsets(set, 2, allow.repeat=T) should work, but I can't get the
> multic package to install, t(combn(set,2)) was suggested but it
> doesn't produce repetitions; expand.grid(rep(list(1:3), 2)) was also
> suggested, but it produces permuations, not combinations.
> Additionally, I would like to iterate through each resultant set for
> large n (similar to the description for getNextSet {pcalg}). Any
> suggestions?
>
> Reuben Cummings
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

_____________________________

Baptiste Auguié

School of Physics
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK

Phone: +44 1392 264187

http://newton.ex.ac.uk/research/emag



More information about the R-help mailing list