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中多个向量的组合的主要内容,如果未能解决你的问题,请参考以下文章