Die Länge aller Listen in einer Liste ausgleichen?

8

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?

    
francoiskroll 14.04.2017, 16:34
quelle

5 Antworten

3

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.

%Vor%

Für originale Listen lautet das Ergebnis:

%Vor%     
Andrey Shabalin 14.04.2017, 16:58
quelle
5

Versuchen Sie es (wo ls Ihre Liste ist):

%Vor%     
989 14.04.2017 17:08
quelle
3

In Listen erscheint NULL passender als NA und könnte mit vector :

hinzugefügt werden %Vor%

Wenn Sie wirklich NA s möchten, ändern Sie einfach vector in rep :

%Vor%

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.

    
alistaire 14.04.2017 18:26
quelle
2

Versuchen Sie Folgendes:

%Vor%


Bearbeiten

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:

%Vor%

Gleichheit vergleichen

%Vor%

Benchmarks

%Vor%

Es gibt zwei Take Aways hier:

  1. Ein gutes Verständnis der apply -Familie von Funktionen macht es möglich prägnanter und effizienter Code (wie in @ alistaires und @ 989's Lösung zu sehen ist).
  2. Die Nuancen von base R im Allgemeinen zu verstehen, kann erhebliche Konsequenzen haben
Joseph Wood 14.04.2017 16:45
quelle
1

Ich bin mir nicht sicher, ob Sie das suchen, und Sie können lengths function für Listen verwenden:

%Vor%

ODER für Listen der Listen, Sie können einen Schritt weiter gehen:

%Vor%     
PKumar 14.04.2017 16:45
quelle

Tags und Links