我想要生成所有可能的排列之间的两个或更多的向量,但是;
例如:
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来完成这一任务?
发布于 2015-08-25 05:45:58
如果我正确理解你的规则,这应该是可行的。
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个向量,您可以使用
do.call(rbind,g(g(g(a,b),c),d))诸若此类。
https://stackoverflow.com/questions/32194077
复制相似问题