R中多个向量的组合

Posted

技术标签:

【中文标题】R中多个向量的组合【英文标题】:Combinations of multiple vectors in R 【发布时间】:2011-12-27 19:55:08 【问题描述】:

我不确定 permutations 是否是正确的词。我想给一组 n 个向量(即[1,2][3,4][2,3])将它们全部置换并得到输出

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

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

【问题讨论】:

我相信你在描述组合。排列类似于组合,但元素的顺序很重要。 【参考方案1】:

这是将向量存储在列表中并使用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

但是,尽管我很聪明,但事实证明expand.grid() 接受了一个列表:

> 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 好尴尬!试图变得聪明确实有它看起来的优势。我不应该在这里接受。我会用一些赞成票来弥补。【参考方案2】:

这就是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

【讨论】:

嗨,我正在尝试这种方法,但收到以下消息:“rep.int(rep.int(seq_len(nx), rep.int(rep.fac, nx)) 中的错误, orep) : vector is too large" 有没有其他方法可以做到这一点? @user1375871 你的向量有多大?

以上是关于R中多个向量的组合的主要内容,如果未能解决你的问题,请参考以下文章

组合列表中的向量以创建数据框 R [重复]

将向量的每个元素与 R 中的另一个向量组合

具有多个NA的向量的备用元素

R:来自具有 2 个可能条件 (+/-) 的元素向量的所有可能组合

R从n个元素的字符向量中生成大小为m的所有可能组合[重复]

R语言的自定义函数—字符组合