首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有约束的2个或多个向量之间的r-置换

有约束的2个或多个向量之间的r-置换
EN

Stack Overflow用户
提问于 2015-08-25 01:13:21
回答 1查看 262关注 0票数 0

我想要生成所有可能的排列之间的两个或更多的向量,但是;

  1. 秩序很重要。
  2. 第一个数字必须小于第二个数字,第二个数字必须小于第三个数字。
  3. 不可能有相同的号码。

例如:

代码语言:javascript
复制
a <- c(3, 5, 8)
b <- c(8, 10, 12)
c <- c(12, 15, 20)

第一个元素来自a,第二个元素来自b,第三个元素来自c

可能的结果是:

(3、8、12)、(3、8、15)、(3、8、20)、(3、10、12)、(3、10、15)及(3、10、20)。

但是不应该有重复数字的结果,例如:

(8、8、12)、(8、12、12)。

如何使用R来完成这一任务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 05:45:58

如果我正确理解你的规则,这应该是可行的。

代码语言:javascript
复制
a <- c(3, 5, 8)
b <- c(8, 10, 12)
c <- c(12, 15, 20)

f <- function(x,y) lapply(y[y>tail(x,1)], function(zz) c(x,zz))
g <- function(x,y) unlist(lapply(x,f,y=y), recursive=FALSE)

do.call(rbind,g(g(a,b),c))
#       [,1] [,2] [,3]
#  [1,]    3    8   12
#  [2,]    3    8   15
#  [3,]    3    8   20
#  [4,]    3   10   12
#  [5,]    3   10   15
#  [6,]    3   10   20
#  [7,]    3   12   15
#  [8,]    3   12   20
#  [9,]    5    8   12
# [10,]    5    8   15
# [11,]    5    8   20
# [12,]    5   10   12
# [13,]    5   10   15
# [14,]    5   10   20
# [15,]    5   12   15
# [16,]    5   12   20
# [17,]    8   10   12
# [18,]    8   10   15
# [19,]    8   10   20
# [20,]    8   12   15
# [21,]    8   12   20

对于4个向量,您可以使用

代码语言:javascript
复制
do.call(rbind,g(g(g(a,b),c),d))

诸若此类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32194077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档