объединить строки со списками combn в R - PullRequest
2 голосов
/ 30 октября 2019

Я хочу перебрать комбинации, созданные combn().

Ввод:

"a" "b" "c" "d"

Желаемый вывод:

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

Что я пробовал:

classes <- letters[1:4]
cl <- lapply(1:length(classes), combn, x = classes)
apply(cl[[1]], 2, paste, collapse = " and ")
apply(cl[[2]], 2, paste, collapse = " and ")
apply(cl[[3]], 2, paste, collapse = " and ")
apply(cl[[4]], 2, paste, collapse = " and ")

По сути, мой вопрос заключается в том, как лучше всего пройтись по последней части apply(cl[[NR]], 2, paste, collapse = " and ").

Я думал о lapply, но я бы назначил FUN дважды, и кажется странным объединить lapply и применить в одном вызове. Цикл for возможен, но, возможно, есть более эффективный способ.

Если Вопрос лучше подходит для проверки кода, я с удовольствием перенесу его.

1 Ответ

2 голосов
/ 30 октября 2019

Вы можете выполнять итерацию по длине вектора и использовать аргумент функции combn(), чтобы свернуть вывод, используя paste():

vec <- letters[1:4]

lapply(seq_along(vec), function(x) combn(vec, x, FUN = paste, collapse = " and "))

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

[[2]]
[1] "a and b" "a and c" "a and d" "b and c" "b and d" "c and d"

[[3]]
[1] "a and b and c" "a and b and d" "a and c and d" "b and c and d"

[[4]]
[1] "a and b and c and d"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...