R: Schleife über Spalten in data.table

8

Ich möchte die Spaltenklassen einer großen data.table ermitteln.

%Vor%

funktioniert, aber anscheinend werden lokale Kopien im Speicher gespeichert:

%Vor%

Eine Schleife scheint nicht möglich, weil eine data.table "with = FALSE" immer zu einer data.table führt.

Eine schnelle und sehr schmutzige Methode ist:

%Vor%

Was ist der eleganteste und effizienteste Weg, dies zu tun?

    
Martijn Tennekes 14.05.2012, 14:09
quelle

2 Antworten

10

Habe es kurz untersucht und es sieht aus wie ein data.table Bug.

%Vor%

Also, schauen Sie sich as.list.data.table an:

%Vor%

Beachten Sie die lästige unclass in der ersten Zeile. ?unclass bestätigt, dass eine tiefe Kopie des Arguments benötigt wird. Von diesem schnellen Blick scheint es nicht so, als ob sapply oder lapply das Kopieren machen (ich glaube nicht, dass sie es getan haben, da R gut ist beim Kopieren-beim-Schreiben, und diese schreiben nicht), sondern eher die as.list in lapply (die an as.list.data.table versendet).

Wenn wir also unclass vermeiden, sollte es schneller werden. Lass es uns versuchen:

%Vor%

Also, ja, unendlich besser.

Ich habe einen Fehler behoben Bericht # 2000 , um die Methode as.list.data.table zu entfernen, da a data.table is() auch bereits list ist. Dies könnte einige Idiome beschleunigen, wie zum Beispiel lapply(.SD,...) . [BEARBEITEN: Dies wurde in Version 1.8.1 behoben].

Danke, dass du diese Frage gestellt hast !!

    
Matt Dowle 14.05.2012, 18:07
quelle
2

Ich sehe in einem solchen Ansatz nichts falsches

%Vor%

es ist im Grunde Ihre schnelle Lösung, aber vielleicht ein bisschen klarer (wenn auch nicht so viel) ...

    
digEmAll 14.05.2012 14:55
quelle

Tags und Links