R:从向量生成所有唯一的排列

P. *_*lle 4 r

我有一个向量,其中重复某些条目。从这个向量中,我想获得所有可能且独特的排列。

环顾四周,我看到了gtools::permutations()推荐了几次,但它不能解决我的问题。

我找到了一种方法RcppAlgos::permuteGeneral()但问题是它将每个条目视为唯一值,然后我必须在第二步中删除重复项。这可能会导致内存问题。

有没有一种简单快速的方法来从向量中获取所有独特的排列?

这是一个可重现的示例:

library(RcppAlgos)
ex <- c("sp1", "sp2", "sp2") # sp2 is repeated twice

perm <- permuteGeneral(v = ex, m = length(ex), repetition = FALSE, freqs = NULL)
perm <- as.data.frame(perm)
perm # some rows are identical (rows 1&2; 3&5, 4&6)
   V1  V2  V3
1 sp1 sp2 sp2
2 sp1 sp2 sp2
3 sp2 sp1 sp2
4 sp2 sp2 sp1
5 sp2 sp1 sp2
6 sp2 sp2 sp1

perm[!duplicated(perm), ] # this is what I want
   V1  V2  V3
1 sp1 sp2 sp2
3 sp2 sp1 sp2
4 sp2 sp2 sp1
Run Code Online (Sandbox Code Playgroud)

G. *_*eck 5

像这样使用它:

library(RcppAlgos)

tab <- table(ex)
permuteGeneral(v = names(tab), freq = tab)
##      [,1]  [,2]  [,3] 
## [1,] "sp1" "sp2" "sp2"
## [2,] "sp2" "sp1" "sp2"
## [3,] "sp2" "sp2" "sp1"
Run Code Online (Sandbox Code Playgroud)