2016-04-05 20 views
2

Ich habe eine Liste von gruppierten Elementen und ich möchte alle möglichen Kombinationen dieser Elemente machen, aber ich möchte nur ein Element aus jeder Gruppe nehmen. Ordnung spielt keine Rolle.Kombinationen von gruppierten Elementen

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

Sagen wir, ich Kombinationen für n machen wollen = 2, n = 3, n = 4, wobei n die Anzahl der Gruppen, den ich verwenden möchte ist.

fand ich eine Lösung, es zu tun, wenn n = Anzahl der Gruppen (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)) 

Wie könnte ich dies tun für n < Anzahl von Gruppen?

+0

Wenn n = 2 wo sind die Elemente zu nehmen? 'Gruppe1' und' Gruppe3', 'Gruppe2' und' Gruppe3' und so weiter? – adaien

+0

Beachten Sie, dass Ihre 'combos' genauso sind wie' expand.grid (vars_list) ', check' all (combos == expand.grid (vars_list)) ' – user1981275

+0

adiana, n = 2 würde bedeuten, dass zwei Elemente verwendet werden sollen zwei getrennte Gruppen z. 'a' von Group1 und 'f' von Group2. user1981275 ist es! sieht so aus als ob deine Antwort den Job erledigt. Danke vielmals. – Xlrv

Antwort

1

Sie combn für immer alle Kombinationen Ihrer Gruppen für n verwenden könnte = 1, n = 2, n = 3 und n = 4 und verwenden Sie dann expand_grid:

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

so für n = 4, Sie würde das gleiche wie in deiner Frage bekommen. Hast du das gemeint?

+0

oder, wenn Sie eine Liste für alle 'n' auf einmal möchten, können Sie sie in ein anderes' lapply' einbinden: 'lapply (1: 4, function (n) {apply (combn (1: length (vars_list), n), 2, Funktion (x) {expand.grid (vars_list [x])})}) ' – user1981275

Verwandte Themen