所有可能的两个向量的组合,同时保持R中的顺序

前端之家收集整理的这篇文章主要介绍了所有可能的两个向量的组合,同时保持R中的顺序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个矢量,说vec1,另一个矢量vec2如下:
vec1 = c(4,1)
# [1] 4 1

vec2 = c(5,3,2)
# [1] 5 3 2

我正在寻找的是vec1和vec2的所有可能的组合,同时保持向量元素的顺序.也就是说,得到的矩阵应该是这样的:

> res
      [,1] [,2] [,3] [,4] [,5]
 [1,]    4    1    5    3    2
 [2,]    4    5    1    3    2
 [3,]    4    5    3    1    2
 [4,]    4    5    3    2    1
 [5,]    5    4    1    3    2
 [6,]    5    4    3    1    2
 [7,]    5    4    3    2    1
 [8,]    5    3    4    1    2
 [9,]    5    3    4    2    1
[10,]    5    3    2    4    1

# res=structure(c(4,4,5,1,# 3,2,# 2,1),.Dim = c(10L,5L))

两个向量不允许重复.也就是说,所得到的矩阵的所有行都具有唯一的元素.

我实际上正在寻找最有效的方式.解决这个问题的一种方法生成长度为n的所有可能的排列(n = 5),然后应用过滤.但是,随着n的增长,它是耗时的.

有没有办法做到这一点?

解决方法

尝试这个:
nv1 <- length(vec1)
nv2 <- length(vec2)
n <- nv1 + nv2

result <- combn(n,nv1,function(v) {z=integer(n);z[v]=vec1;z[-v]=vec2;z})

这个想法是产生所有组合的索引,以便放置vec1的元素.

猜你在找的Java相关文章