我们如何在R中从一个可变长度的向量中生成所有可能的组合(可变长度,这样如果有3个元素,则结果列表的长度可以是1,2或3):
# 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')谢谢!
发布于 2016-08-08 09:54:33
这里有一种方法,但对于较长的向量,它的性能很差。可能有一种更整洁的方法来做这件事,但在此期间这可能就足够了。
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" https://stackoverflow.com/questions/38799696
复制相似问题