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?
Habe es kurz untersucht und es sieht aus wie ein data.table
Bug.
Also, schauen Sie sich as.list.data.table
an:
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:
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 !!
Tags und Links r data.table sapply