让我们说我有一个1:6的整数向量
w=1:6
我试图获得一个包含90行和6列的矩阵,其中包含来自这6个整数的多项式组合,这些组合被视为3个大小为2的组。
6!/(2!×2!×2!)= 90
因此,矩阵的第1列和第2列代表第1组,第3列和第4列代表第2组,第5列和第6列代表第3组。例如:
1 2 3 4 5 6
1 2 3 5 4 6
1 2 3 6 4 5
1 2 4 5 3 6
1 2 4 6 3 5
...
最终,我想将其扩展到其他有限大小的多项式组合(因为数字变得相当快)但我无法让事情发挥作用。我发现了几个做二项式组合的函数(只有2组)但是当组数大于2时,我找不到任何执行此操作的函数。
我已尝试过两种方法:
使用for循环从没有任何东西构建矩阵并使用reshape包尝试事物(认为这可能是使用melt()的事情)
通过尝试在组内保留唯一行并删除组内的重复行,从排列矩阵(720行)向后工作
两者都不适合我。
可以用
获得置换矩阵library(gtools)
dat=permutations(6, 6, set=TRUE, repeats.allowed=FALSE)
我认为从完整的排列矩阵向后工作有点过分,但此时我还要做任何事情。
是否有针对此预先构建的功能的包?任何人都有任何想法我会怎么做?
答案 0 :(得分:1)
以下是如何实施"向后工作"的方法:
gps <- list(1:2, 3:4, 5:6)
get.col <- function(x, j) x[, j]
is.ordered <- function(x) !colSums(diff(t(x)) < 0)
is.valid <- Reduce(`&`, Map(is.ordered, Map(get.col, list(dat), gps)))
dat <- dat[is.valid, ]
nrow(dat)
# [1] 90