Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamic arguments to expand.grid

Tags:

r

combinations

I am using expand.grid to generate all of the pairs of the elements of a vector, such as:

v <- 1:3
expand.grid(v,v)

Which gives:

  Var1 Var2
1    1    1
2    2    1
3    3    1
4    1    2
5    2    2
6    3    2
7    1    3
8    2    3
9    3    3

Now, say I want the same thing but with triplets I use

expand.grid(v,v,v)

How would I go about generalizing this to n-tuples so that I can use new.expand.grid(v,5) and have the result of expand.grid(v,v,v,v,v)?

like image 260
nico Avatar asked Oct 16 '13 17:10

nico


1 Answers

expand.grid can take a list as its input, so what about replicate?

expand.grid(replicate(3, v, simplify=FALSE))

For fun, as a function (though I know you would know how to do this):

new.expand.grid <- function(input, reps) {
  expand.grid(replicate(reps, input, simplify = FALSE))
}

new.expand.grid(c(1, 2), 4)
#    Var1 Var2 Var3 Var4
# 1     1    1    1    1
# 2     2    1    1    1
# 3     1    2    1    1
# 4     2    2    1    1
# 5     1    1    2    1
# 6     2    1    2    1
# 7     1    2    2    1
# 8     2    2    2    1
# 9     1    1    1    2
# 10    2    1    1    2
# 11    1    2    1    2
# 12    2    2    1    2
# 13    1    1    2    2
# 14    2    1    2    2
# 15    1    2    2    2
# 16    2    2    2    2
like image 56
A5C1D2H2I1M1N2O1R2T1 Avatar answered Oct 09 '22 17:10

A5C1D2H2I1M1N2O1R2T1