2016-08-06 17 views
3

Rで可能なすべての組み合わせをどのように生成するのですか(3つの要素があれば結果のリストの長さは1、2または3になります)可変長のベクトルから:Rで可能なすべてのmの組み合わせをどのように生成するか

# 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') 

ありがとうございました!

+0

@MrFlickは、それは?違う私にはまったく同じに見えるもの...私は後の午前 – user971102

+0

異なる結果です。 – Eiko

+1

@MrFlick私はこれを探しているわけではありませんのでご注意ください(重複して記入した質問です): "a" "b" "ab" "c" "ac" "bc" "abc";私はこのようなすべての組み合わせを探しています:「a」「b」「c」「ab」「a」「b」「ac」「a」「c」「bc」「abc」「a、bc」「b」「c」 "ab、c" "ac、b" "a、b、c" – user971102

答えて

1

これは1つの方法ですが、長いベクトルの場合は機能しません。おそらくこれを行うもっときれいな方法がありますが、それでも十分です。これは重複しない

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" 
+0

jbaumsありがとうございました...最終的には3文字の場合14組、4文字の場合は51組です。本当に数学を示すのに役立ちます。本当にありがとう! – user971102

関連する問題