如何生成矢量的所有组合

时间:2012-08-23 04:53:46

标签: r

说我有3个绿球,2个橙球和8个黄球。我想订购它们,我怎样才能生成所有可能的序列,因为所有相同颜色的球都是相同的。

在R中,使用gregmisc,我可以

balls<-c('orange','orange', 'green', 'green','green','yellow'...'yellow')

然后再做

g <- permutations(length(balls),length(balls),v=balls,set=F)
g.reduced <- g[!duplicated(g),]

但这似乎非常不必要。

1 个答案:

答案 0 :(得分:0)

这是我能想到的最明显的方法。这是我从上面的评论中的方法,但我从向量中删除了非唯一元素的所有条目,而不是除了一个之外的所有条目。如果我留下了一个,这个方法会导致每个条目都有一个副本。

arr  # one of the rows of the matrix of permutations
l  # the length of the original un-unique'd vector
out <- list()
vec <- vector(length=l)
find.placings <- function(start, pos, vec, m) {
    if (m == 0)
        return(vec)
    for (i in pos:(l - m + 1)) {
        vec[i] <- arr[start]
        out[[length(out) + 1]] <- find.placings(start + 1, i + 1, vec, m - 1)
    }
}

当然,因为这是高度递归的提防。我还没有测试过它。如果要调用该函数,请将其原始值设为(1, 1, vector(length=l), m)