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 ...)
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 ...
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 ...)
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%