Eine Quelle der Beschleunigung ist es, eine kleinere Version von %code% zu schreiben, die weniger tut. %code% unter ist restriktiver als %code% . Es geht beispielsweise davon aus, dass Sie keine fehlenden Werte haben und dass Sie immer die Statistik für einen zweiseitigen Test wünschen.
%Vor%Überprüfen Sie, ob die Ausgabe konsistent mit %code% ist.
%Vor%Bestimmen Sie nun die Einsparungen durch die kleinere Funktion:
%Vor%Ich konnte die paarweise Kruskal-Wallis-Statistik mit %code% mit %code% berechnen.
%Vor%Dies bringt das erwartete Ergebnis, ist aber für einen Datensatz Ihrer Größe langsam. Langsam langsam langsam. Dies liegt möglicherweise daran, dass %code% bei jeder Iteration viel mehr berechnet als nur die Statistik; es bekommt auch den p-Wert und macht eine Menge Fehlerprüfung.
In der Tat, wenn wir einen großen Datensatz wie folgt simulieren:
%Vor%Die %code% -Lösung benötigt viel Zeit. Ich hielt die Ausführung nach ungefähr 2 Stunden an, zu welchem Zeitpunkt fast alle (aber nicht alle) Ergebnisse berechnet worden waren.
Obwohl %code% wahrscheinlich schneller ist als eine %code% -Schleife, ist es wahrscheinlich nicht die beste Gesamtlösung in Bezug auf die Leistung.
Ich habe eine Matrix, in der jede Zeile ein Muster aus einer Distribution ist. Ich möchte einen rollenden Vergleich der Verteilungen mit %code% durchführen und die Teststatistik jeweils speichern. Der einfachste Weg, dies konzeptionell zu implementieren, ist eine Schleife:
%Vor%Meine realen Daten haben jedoch ~ 400 Spalten und ~ 300.000 Zeilen für ein einzelnes Beispiel, und ich habe viele Beispiele. Also ich möchte, dass es schnell geht. Der Kolmogorov-Smirnov-Test ist nicht so mathematisch kompliziert, und wenn die Antwort lautet: "Implementiere ihn in %code% ", werde ich das widerwillig akzeptieren, aber ich wäre etwas überrascht - es ist schon sehr schnell, darauf zu rechnen ein einzelnes Paar in R.
Methoden, die ich versucht habe, aber nicht funktionieren konnten: %code% mit %code% , %code% mit %code% (was ich zum Generieren der Distributionen verwende) und %code% einfüllen eine Schleife (bearbeiten: diese funktioniert, aber es ist immer noch langsam).
Hier ist eine %code% -Lösung, die das gleiche Ergebnis wie Ihre Schleife erzielt. Ich habe Zweifel, ob das tatsächlich schneller ist als die Schleife, aber vielleicht kann es als erster Schritt zu einer Lösung dienen.
%Vor%Eine schnelle und schmutzige Implementierung in Rcpp
%Vor%für die Matrix der Größe %code% , es ist unter 1s abgeschlossen.
%Vor%Und das Ergebnis scheint genau zu sein.
%Vor%