2016-05-30 2 views
0

Ich habe eine große Liste mit 28 Objekt, von denen einige leer sind und einige sind mehr oder weniger 165 Werte. Zusammenfassung (stim10)Anzahl der Zahlen in großen Liste ändern und leere Objekte entfernen

 Length Class Mode 
[1,] 165 factor numeric 
[2,] 0 factor numeric 
[3,] 165 -none- numeric 
[4,] 0 -none- numeric 
[5,] 166 -none- numeric 
[6,] 0 -none- numeric 
[7,] 166 -none- numeric 

usw.

Jetzt möchte ich diese Werte in einem data.frame bekommen, so kann ich gut so auf sie analysiert und exportieren. Die Art, wie ich ein Objekt entfernen verwenden ist

stim10[[2]]<-NULL. 

Dies muss vom höchsten zum niedrigsten Objektnummer durchgeführt werden, da es das komplette Objekt entfernt und ändert die Reihenfolge. Der Code, den ich verwenden, um alle die gleiche Länge zu machen das Objekt, um es für die Datenrahmen bereit zu machen ist:

stim10[[3]]<-stim10[[3]][1:163] 

Worin 163 niedrigste Länge des Objekts mit Werten ist.

Jetzt funktioniert das aber ich hätte gerne einen eleganteren Weg dies zu tun, da ich dies auf 38 Teilmengen von Daten anwenden muss. Ich habe versucht, die Anwenden-Funktion auf eine Vielzahl von Arten zu verwenden, aber jede Art, die ich versuche, gibt den Fehler, dass mir eine Funktion fehlt. In der ersten Zeile des Codes habe ich versucht, assign() zu verwenden, aber es gibt wieder, dass ich keine Funktion habe.

Ich fürchte, ich bekomme die Anwendungsfunktionsgruppe nicht gut genug, um sie hier anzuwenden. Deine Hilfe ist sehr Willkommen.

Antwort

0

Wählen Sie Nicht-Null-Länge-Elemente mit stim10[lengths(stim10) != 0] dann verwenden lapply mit Funktion head nur die ersten 163 Zahlen zu erhalten:

lapply(stim10[lengths(stim10) != 0], head, 163) 
+0

Die Funktion "Lapply to Head" funktioniert perfekt. Wenn ich jedoch versuche, eine neue Liste mit dieser Funktion zu erstellen (oder sie separat aufzurufen), enthält sie immer noch alle Objekte mit dem Wert num (0) –

0

Während stim10[lengths(stim10) != 0] nicht irgendwie nur das Objekt in der Liste mit den Werten wählen funktionierten. stim10[lapply(stim10,length)>0] tat dies, indem Sie alle Objekte größer als 0 (anstatt nicht 0) auswählten. Dann gilt dies für die Lösung von @bergant funktioniert:

lapply(stim10[lapply(stim10,length)>0], head, 163) 
Verwandte Themen