如何仅用R基础包生成向量的无序唯一对(含相同元素组合)
R生成含自配对的无序二元唯一组合的简洁实现
核心实现方案
你可以利用组合数生成的特性,仅通过一次combn调用完成需求,无需拼接矩阵,代码更简洁:
gen <- function(n) { m <- combn(n + 1, 2) m[2, ] <- m[2, ] - 1 # 若需要和原有实现完全一致的列顺序(先异元素组合、后自组合),保留下面这行 m <- m[, order(m[1,] == m[2, ])] return(m) }
效果验证
- n=2时输出:
[,1] [,2] [,3] [1,] 1 1 2 [2,] 1 2 2
- n=3时输出:
[,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 1 1 2 2 3 [2,] 1 2 3 2 3 3
完全符合你的输出要求。
方案优势
- 完全基于R基础库实现,无任何额外依赖
- 没有生成冗余数据,内存效率和你原有实现持平,同时省去了
cbind、rbind的矩阵拼接开销 - 代码逻辑更简洁,仅需2-3行核心逻辑即可完成需求,不需要额外拼接操作
内容的提问来源于stack exchange,提问作者J. Mini
相关产品推荐
相关产品推荐

