Ich habe eine Liste von Vektoren variabler Länge, zum Beispiel:
%Vor%Ich muss z. B. die Anzahl der Vorkommen für jeden der Vektoren in der Liste zählen (jede andere geeignete Datenstruktur ist akzeptabel):
%Vor%Gibt es einen effizienten Weg, dies zu tun? Die tatsächliche Liste hat Zehntausende von Elementen, so dass quadratisches Verhalten nicht möglich ist.
match
und unique
akzeptieren und behandeln auch "list" s ( ?match
warnt davor langsam auf "list" s zu sein). Also, mit:
Jedes Element wird einer einzelnen ganzen Zahl zugeordnet. Dann:
%Vor%Und finden Sie eine Struktur, um die Ergebnisse zu präsentieren:
%Vor% Alternativ zu match(x, unique(x))
approach könnten wir jedes Element mit deparse
ing:
Da es sich um einen Fall mit eindeutigen Ganzzahlen handelt und wir von einem kleinen Bereich ausgehen, könnten wir jedes Element nach der Umwandlung jedes Elements in eine Binärdarstellung in eine einzelne Ganzzahl umwandeln:
%Vor% und dann tabulate
wie zuvor.
Und nur um die obigen Alternativen zu vergleichen:
%Vor% Eine weitere interessante Alternative basiert auf der Bestellung. R & gt; 3.3.0 hat eine grouping
-Funktion, die aus data.table erstellt wurde, die zusammen mit der Reihenfolge einige Attribute für die weitere Bearbeitung bereitstellt:
Machen Sie alle Elemente von gleicher Länge und "transpose" (wahrscheinlich die langsamste Operation in diesem Fall, obwohl ich nicht sicher bin, wie sonst grouping
zu füttern ist):
Verwenden Sie die Sortierung, um ähnliche Elemente zu gruppieren, die ganzen Zahlen zugeordnet sind:
%Vor%dann, tabellarisch wie zuvor. Um die Vergleiche fortzusetzen:
%Vor% In diesem Vergleich sind q
Elemente von geringer Länge, um für f3
, aber f3
(wegen der großen Potenzierung) und f4
(wegen mapply
) zu berücksichtigen, wenn "Listen" von größeren Elementen verwendet werden.
Tags und Links r