Комбинированный поиск для вектора символов - PullRequest
0 голосов
/ 04 октября 2018
a<-c('a','b','c','d')

Нужно разделить это на комбинации

Требуемый выход

(a b c d,a b c,b c d,a b,b c,c d,a,b,c,d)

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Требуемый выход может быть получен из блока питания из c('a', 'b', 'c', 'd') = letters[1:4].Используя функцию powerset из библиотеки rje, мы имеем:

unlist(lapply(rje::powerSet(letters[1:4])[-1], paste0, collapse = ' '))
[1] "a"       "b"       "a b"     "c"       "a c"     "b c"     "a b c"  
[8] "d"       "a d"     "b d"     "a b d"   "c d"     "a c d"   "b c d"  
[15] "a b c d"
0 голосов
/ 04 октября 2018

Я использовал предложения @ chinsoon12 с дополнительными paste, чтобы получить требуемый результат:

paste(lapply(unlist(lapply(rev(seq_along(a)), function(m) combn(a, m, simplify=FALSE)), recursive=FALSE), paste, collapse=" "), collapse=",")

Возвращает: "abcd, abc, abd, acd, bcd, ab, ac, ad, bc,шд, кд, а, б, в, г "

...