r - 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
解决方案
像这样使用它:
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"
推荐阅读
- c# - 项目背景的复选框颜色
- ember.js - Ember:如何判断 peekAll 是否返回任何模型?
- javascript - Javascript 正则表达式 - | (OR) 运算符仅返回第一个匹配项
- r - 如何通过针对协变量等进行调整的治疗来绘制预测因子?
- r - R:“注意:全局变量没有可见的绑定”
- javascript - javascript验证复选框
- javascript - 如何在 JavaScript 中每 5 分钟循环调用两个交替函数?
- node.js - Facebook 无人值守 nodejs 应用程序,用于将视频/照片发布到页面
- python - 我如何提供变量自定义元数据?
- java - Initialization-on-demand holder idiom - 什么时候加载类?