R中多个向量的组合

R中多个向量的组合,r,combinations,R,Combinations,我不确定排列是否是正确的词。我希望给定一组n个向量(即[1,2],[3,4]和[2,3])对它们进行排列,并得到 [1,3,2],[1,3,3],[1,4,2],[1,4,3],[2,3,2] etc. R中是否有一个操作可以执行此操作?这就是expand.grid所做的 从帮助页引用:从提供的向量或因子的所有组合创建数据帧。结果是一个data.frame,每个组合有一行 expand.grid( c(1, 2), c(3, 4), c(2, 3) ) Var1

我不确定排列是否是正确的词。我希望给定一组n个向量(即
[1,2]
[3,4]
[2,3]
)对它们进行排列,并得到

[1,3,2],[1,3,3],[1,4,2],[1,4,3],[2,3,2] etc.

R中是否有一个操作可以执行此操作?

这就是
expand.grid
所做的

从帮助页引用:从提供的向量或因子的所有组合创建数据帧。结果是一个
data.frame
,每个组合有一行

expand.grid(
    c(1, 2),
    c(3, 4),
    c(2, 3)
)

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

这对于将向量存储在列表中并使用
do.call()
为您安排适当的函数调用是非常有用的
expand.grid()
是您想要的标准函数。但您不必键入或命名单个向量,请尝试:

> l <- list(a = 1:2, b = 3:4, c = 2:3)
> do.call(expand.grid, l)
  a b c
1 1 3 2
2 2 3 2
3 1 4 2
4 2 4 2
5 1 3 3
6 2 3 3
7 1 4 3
8 2 4 3

我相信你在描述组合。排列与组合相似,但元素的顺序很重要。@Andrie多么尴尬啊!看起来,过于聪明确实有其好处。不过,我不应该在这里被接受。我会用一些修正票来弥补。嗨,我正在尝试这种方法,但我得到的信息是:“rep.int中的错误(rep.int(seq_len(nx),rep.int(rep.fac,nx)),orep):向量太大了”有没有其他方法可以做到这一点?@user1375871你的向量有多大?
> expand.grid(l)
  a b c
1 1 3 2
2 2 3 2
3 1 4 2
4 2 4 2
5 1 3 3
6 2 3 3
7 1 4 3
8 2 4 3