首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中生成所有可能的m个组合,其中m是可变的

问如何在R中生成所有可能的m个组合,其中m是可变的
EN

Stack Overflow用户
提问于 2016-08-06 09:19:37
回答 1查看 161关注 0票数 3

我们如何在R中从一个可变长度的向量中生成所有可能的组合(可变长度,这样如果有3个元素,则结果列表的长度可以是1,2或3):

代码语言:javascript
复制
# say we have a vector of length 3:
vec = letters[1:3]

ret = list('a', 'b', 'c', 'ab', 'ac', 'bc', 'abc', 'a,b', 'a,c', 'a,bc', 'b,c', 'ac,b', 'ab,c', 'a,b,c')

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-08 09:54:33

这里有一种方法,但对于较长的向量,它的性能很差。可能有一种更整洁的方法来做这件事,但在此期间这可能就足够了。

代码语言:javascript
复制
get_combos <- function(x) {
  x2 <- unlist(lapply(seq_along(x), function(m) 
    sapply(combn(x, m, simplify=FALSE), paste0, collapse='')))
  x3 <- expand.grid(rep(list(x2), length(x)))
  x4 <- sapply(apply(x3, 1, unique), function(x) paste0(sort(x), collapse=','))
  unique(grep('.*([^,]).*\\1', x4, val=TRUE, invert=TRUE))
}

get_combos(letters[1:3])

##  [1] "a"     "a,b"   "a,c"   "a,bc"  "a,b,c" "b"     "b,c"   "ac,b" 
##  [9] "c"     "ab,c"  "ab"    "ac"    "bc"    "abc"  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38799696

复制
相关文章

相似问题

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