Ich habe eine Liste von Listen, und ich möchte, dass die Unterlisten alle dieselbe Länge haben
d. um sie bei Bedarf mit NA
s aufzufüllen, damit sie alle die Länge der längsten Liste erreichen.
Mock-Beispiel
%Vor%Mein bester Versuch noch
%Vor%Problem, es ersetzt alle meine Unterlisten in eine Ganzzahl = max_length ...
%Vor%Kann jemand helfen?
Hier ist Ihr Code behoben.
Die Funktion sollte x
, nicht length(x)
zurückgeben.
Außerdem habe ich Vektoren verwendet, keine Listen für Klarheit.
Für originale Listen lautet das Ergebnis:
%Vor% In Listen erscheint NULL
passender als NA
und könnte mit vector
:
Wenn Sie wirklich NA
s möchten, ändern Sie einfach vector
in rep
:
Beachten Sie, dass die Typen in letzterem Fall nicht übereinstimmen, es sei denn, Sie geben NA_real_
oder coerce NA
an, um den Typ von x
zu finden.
Versuchen Sie Folgendes:
%Vor%
Ich wollte nur beleuchten, wie die Verwendung der richtigen Tools in R
einen großen Unterschied macht. Obwohl meine Lösung korrekte Ergebnisse liefert, ist sie sehr ineffizient. Indem wir sapply(ls, length)
durch lengths
sowie lapply(1:z, function(y) NA)
durch as.list(rep(NA, z))
ersetzen, erhalten wir eine fast 15-fache Beschleunigung. Beobachte:
Gleichheit vergleichen
%Vor%Benchmarks
%Vor%Es gibt zwei Take Aways hier:
apply
-Familie von Funktionen macht es möglich
prägnanter und effizienter Code (wie in @ alistaires und @ 989's Lösung zu sehen ist). base R
im Allgemeinen zu verstehen, kann erhebliche Konsequenzen haben