在R

时间:2015-09-09 12:08:50

标签: r iteration combinations

我想知道是否有任何方法可以使用expand.grid()函数(或任何其他函数)为指定数量的序列生成所有可能的组合。后者由用户给出。

期望的结果。例如,

expand.grid(0:1, 0:1)
  Var1 Var2
1    0    0
2    1    0
3    0    1
4    1    1

expand.grid(0:1, 0:1, 0:1)
  Var1 Var2 Var3
1    0    0    0
2    1    0    0
3    0    1    0
4    1    1    0
5    0    0    1
6    1    0    1
7    0    1    1
8    1    1    1

expand.grid(0:1, 0:1, 0:1, ...)
  Var1 Var2 Var3 ...
1    0    0    0 ...
2    1    0    0 ...
3    0    1    0 ...
4    1    1    0 ...
5    0    0    1 ...
6    1    0    1 ...
7    0    1    1 ...
8    1    1    1 ...
.    .    .    .
.    .    .    .
.    .    .    .

注意:实现不仅限于0-1序列,因此它也适用于expand.grid(0:1, 0:5, 2:4, 3:5)

之类的内容

我的实施。我正在尝试这样的事情:

expand.grid(rep(0:1, 3))

但是R将此解释为单个序列:

  Var1
1    0
2    1
3    0
4    1
5    0

任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:5)

我们可以rep list然后执行expand.grid

expand.grid(rep(list(0:1),3))
#  Var1 Var2 Var3
#1    0    0    0
#2    1    0    0
#3    0    1    0
#4    1    1    0
#5    0    0    1
#6    1    0    1
#7    0    1    1
#8    1    1    1

或另一种选择是使用replicatesimplify=FALSE一起返回list输出,然后使用expand.grid

expand.grid(replicate(3, 0:1, simplify=FALSE))