Manchmal möchte ich einen genauen Test durchführen, indem ich alle möglichen Kombinationen der Daten untersuche, um eine empirische Verteilung zu erstellen, anhand derer ich meine beobachteten Unterschiede zwischen den Mitteln testen kann. Um die möglichen Kombinationen zu finden, würde ich normalerweise die Combn-Funktion verwenden. Die Auswahlfunktion kann mir zeigen, wie viele mögliche Kombinationen es gibt. Es ist sehr leicht, dass die Anzahl der Kombinationen so groß wird, dass es nicht möglich ist, das Ergebnis der Combn-Funktion zu speichern, z. B. erfordert Combn (28,14) einen 2,1-Gb-Vektor. Also habe ich versucht, ein Objekt zu schreiben, das dieselbe Logik wie die Combn-Funktion durchläuft, um die Werte einzeln von einem imaginären "Stapel" bereitzustellen. Diese Methode (wie ich sie instanziiert habe) ist jedoch leicht 50-mal langsamer als das Kämmen bei vernünftigen Kombinationsgrößen.
Gibt es einen besseren Algorithmus für diese Art von Dingen als den in combn verwendeten Algorithmus? Gibt es speziell eine Möglichkeit, die N-te mögliche Kombination zu generieren und zu ziehen, ohne alle vorherigen Kombinationen zu berechnen?
quelle
Antworten:
Wenn Sie die Verarbeitungsgeschwindigkeit gegen Speicher eintauschen möchten (was ich glaube), würde ich den folgenden Algorithmus vorschlagen:
Dadurch erhalten Sie alle N Auswahl K möglichen Kombinationen, ohne sie explizit erstellen zu müssen. Ich habe Code, um dies in R zu tun, wenn Sie es möchten (Sie können mir eine E-Mail an mark dot m period fredrickson at-symbol gmail dot com senden).
quelle
Das Generieren von Kombinationen ist ziemlich einfach, siehe zum Beispiel dies ; Schreiben Sie diesen Code in R und verarbeiten Sie dann jede Kombination zu einem Zeitpunkt, zu dem sie angezeigt wird.
quelle