Kombination von expand.grid und mapply?

8

Ich versuche, eine Variante von mapply (nennen Sie es xapply für jetzt), die die Funktionalität (Art von) von expand.grid und mapply kombiniert. Das heißt, für eine Funktion FUN und eine Liste der Argumente L1 , L2 , L3 , ... von unbekannter Länge sollte eine Liste mit der Länge n1*n2*n3 erstellt werden. (wobei ni die Länge der Liste i ist), die das Ergebnis der Anwendung von FUN auf alle Kombinationen der Elemente der Liste ist.

Wenn expand.grid gearbeitet hat, um Listen von Listen anstatt von Datenrahmen zu erzeugen, könnte man sie vielleicht verwenden, aber ich denke daran, dass die Listen Listen von Dingen sein können, die nicht unbedingt in einen Datenrahmen passen .

Diese Funktion funktioniert, wenn es genau drei Listen zu erweitern gibt, aber ich bin neugierig auf eine allgemeinere Lösung. ( FLATTEN ist nicht belegt, aber ich kann mir vorstellen, dass FLATTEN=FALSE verschachtelte Listen anstelle einer einzelnen Liste erzeugen würde ...)

%Vor%

edit: hat vergessen, das Ergebnis zurückzugeben. Man könnte das vielleicht lösen, indem man eine Liste der Indizes mit combn erstellt und von dort ausgeht ...

    
Ben Bolker 29.06.2011, 02:25
quelle

1 Antwort

2

Ich denke, ich habe eine Lösung für meine eigene Frage, aber vielleicht kann jemand es besser machen (und ich habe FLATTEN=FALSE nicht implementiert ...)

%Vor%

bearbeiten : Ich habe @ baptistes Vorschlag versucht, aber es ist nicht einfach (oder war nicht für mich). Das nächste, was ich bekam, war

%Vor%

was immer noch nicht funktioniert. expand.grid ist in der Tat flexibler als ich dachte (obwohl es einen seltsamen Datenrahmen erzeugt, der nicht gedruckt werden kann), aber genug Magie passiert in mlply , das kann ich nicht ganz richtig machen.

Hier ist ein Testfall:

%Vor%     
Ben Bolker 29.06.2011, 02:36
quelle

Tags und Links