2016-04-05 3 views
2

У меня есть список сгруппированных элементов, и я хочу сделать все возможные комбинации этих элементов, однако я хочу только взять один элемент из каждой группы. Заказ не имеет значения.Комбинации из сгруппированных элементов

vars_list <- list(Group1 = letters[1:5], Group2 = letters[6:9], 
        Group3 = letters[10:11], Group4 = letters[12:15]) 

Скажем, я хочу, чтобы сделать комбинации при п = 2, п = 3, п = 4, где п число групп, я хочу использовать.

Я нашел решение, чтобы сделать это при п = число групп (Combinations from recursive lists):

lengths <- c(1, 1, 1, 1) 
combos <- expand.grid(mapply(function(element, n) combn(element, m=n, 
FUN=paste0, collapse=""), vars_list, lengths, SIMPLIFY = F)) 

Как я могу сделать это для п < числа групп?

+0

Если n = 2, где находятся элементы, которые нужно взять? 'Group1' и' Group3', 'Group2' и' Group3' и т. Д.? – adaien

+0

Обратите внимание, что ваши 'комбо' такие же, как' expand.grid (vars_list) ', check' all (комбо == expand.grid (vars_list)) ' – user1981275

+0

adiana, n = 2 означает, что два элемента должны быть взяты из две отдельные группы, например. 'a' из Group1 и 'f' из Group2. пользователь1981275, это! похоже, что ваш ответ выполняет эту работу. большое спасибо. – Xlrv

ответ

1

Вы можете использовать combn для получения всех комбинаций ваших групп при п = 1, п = 2, п = 3 и п = 4, а затем использовать expand_grid:

n = 2 
apply(combn(1:length(vars_list), n), 2, function(x){expand.grid(vars_list[x])}) 

так при п = 4, то будет так же, как и в вашем вопросе. Это то, что вы имели в виду?

+0

или, если вам нужен список для всех 'n' за один раз, вы можете перенести его в другой' lapply': 'lapply (1: 4, function (n) {apply (combn (1: length (vars_list), n), 2, function (x) {expand.grid (vars_list [x])})}) ' ' – user1981275

Смежные вопросы