Генерация всех комбинаций (и их сумма) вектора символов в R - PullRequest
1 голос
/ 10 октября 2019

Предположим, у меня есть вектор длины n, и мне нужно сгенерировать все возможные комбинации и их суммы. Например:

Если n=3, у нас есть:

myVec <- c("a", "b", "c")

Output = 
"a"
"b"
"c"
"a+b"
"a+c"
"b+c"
"a+b+c"

Обратите внимание, что мы считаем, что a+b = b+a, поэтому нужно оставить только один.

Другой примересли n=4,

myVec <- c("a", "b", "c", "d")

Output:
"a"
"b"
"c"
"d"
"a+b"
"a+c"
"a+d"
"b+c"
"b+d"
"c+d"
"a+b+c"
"a+c+d"
"b+c+d"
"a+b+c+d"

1 Ответ

3 голосов
/ 10 октября 2019

Мы можем использовать sapply с переменной длиной в combn и использовать paste в качестве функции для применения.

sapply(seq_along(myVec), function(n) combn(myVec, n, paste, collapse = "+"))

#[[1]]
#[1] "a" "b" "c"

#[[2]]
#[1] "a+b" "a+c" "b+c"

#[[3]]
#[1] "a+b+c"


myVec <- c("a", "b", "c", "d")
sapply(seq_along(myVec), function(n) combn(myVec, n, paste, collapse = "+"))

#[[1]]
#[1] "a" "b" "c" "d"

#[[2]]
#[1] "a+b" "a+c" "a+d" "b+c" "b+d" "c+d"

#[[3]]
#[1] "a+b+c" "a+b+d" "a+c+d" "b+c+d"

#[[4]]
#[1] "a+b+c+d"

Мы можем unlist, если нам нужен вывод как один вектор.

...