首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成有序组合的函数

生成有序组合的函数
EN

Stack Overflow用户
提问于 2017-06-08 19:19:48
回答 1查看 464关注 0票数 0

哪个R命令生成长度为k的所有可能的有序组合?

例如,从这个向量:

代码语言:javascript
复制
a,b,c,d  

它希望生成长度为3的所有组合,但只生成顺序保持不变的组合:

代码语言:javascript
复制
a,b,c  
a,b,d  
a,c,d  
b,c,d 

或者如果我有这个向量

代码语言:javascript
复制
a,b,7,d,e

我想对长度2做同样的事情:

代码语言:javascript
复制
a,b  
a,7  
a,d  
a,e  
b,7  
b,d  
b,e  
7,d  
7,e  
d,e

combn在这里不起作用,因为它给出了所有可能的组合,包括相反的组合,例如

c,b

在简单的情况下,我可以尝试使用expand.grid,但这两种方法都需要进一步处理。

也许有一个基本函数(或包)可以做我想做的事情,甚至可以接受更复杂的条件。

PD:当我说“有序的”时,我指的是起始向量中出现的顺序。我不是指排版顺序,尽管在我的示例中它们是相同的。

EN

回答 1

Stack Overflow用户

发布于 2017-06-08 19:24:37

您可以在基数R中使用combn

代码语言:javascript
复制
vec <- c("a", "b", "c", "d")
len <- 2
combn(length(vec), len, function(x) vec[x])

#    [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] "a"  "a"  "a"  "b"  "b"  "c" 
#[2,] "b"  "c"  "d"  "c"  "d"  "d" 

长度为3

代码语言:javascript
复制
combn(length(vec), 3, function(x) vec[x])

#     [,1] [,2] [,3] [,4]
#[1,] "a"  "a"  "a"  "b" 
#[2,] "b"  "b"  "c"  "c" 
#[3,] "c"  "d"  "d"  "d" 

或者就像@Sotos在评论中指出的那样:

代码语言:javascript
复制
combn(vec, len)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44434283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档