加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:23:58 所属栏目:Java 来源:网络整理
导读:我有一个矢量,说vec1,另一个矢量vec2如下: vec1 = c(4,1)# [1] 4 1vec2 = c(5,3,2)# [1] 5 3 2 我正在寻找的是vec1和vec2的所有可能的组合,同时保持向量元素的顺序.也就是说,得到的矩阵应该是这样的: res [,1] [,2] [,3] [,4] [,5] [1,] 4 1 5 3 2 [2,] 4
我有一个矢量,说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的元素.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读