Klasse von Daten.Tabelle Spalte
Ich würde gerne wissen, wie um festzustellen, die Klasse für eine Spalte in einer Datengrundlage.Tabelle dt
gegeben ein Charakter-Vektor w
.
Reproduzierbare Beispiel:
dt <- data.table(matrix(1:10, 2))
w <- "V1"
Wenn Sie angeben, dass eine Spalte über den Namen direkt, es gibt den Vektor so, dass man seine Klasse:
> dt[,V1]
[1] 1 2
> class(dt[,V1])
[1] "integer"
Geben Sie es als ein Zeichen, Vektor, jedoch, und es stattdessen gibt eine eine Spalte Daten.Tabelle:
> dt[,w,with=FALSE]
V1
1: 1
2: 2
> class(dt[,w,with=FALSE])
[1] "data.table" "data.frame"
Habe ich irgendwie verwurschtelt meine Art zu der folgenden Lösung, aber sicher gibt es einen besseren Weg:
dt[,eval(parse(text=paste0("class(",w,")")))]
Also zwei Fragen:
- Ist es besser (präziser), um die Klasse für eine einzelne Spalte (withoout geben, bis die Geschwindigkeit mit der die oben genannte Lösung die Gewinne durch die Bewertung der Aufruf
class
im Umfeld der Daten.Tabelle? - Gibt es einen Weg, um einen Vektor für die Klassen aller Spalten, analagous zu
sapply( myDataFrame, class)
?
- hee hee du weißt es besser, als zuzugeben, um mittels "eval(parse(" 🙂
- Ich habe keine Schande 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheinen diese arbeiten in der Weise, die Sie wollen:
class(dt[[w]])
sapply(dt,class)
Auch, denn 2 und dann ausgewählte Werke für 1:
sapply(dt,class)[w]
.data.table
-like, so dass ich annahm, es würde schneller sein, aber das timing zeigt, dass selbst auf einem großen Tisch, es ist langsamer (wahrscheinlich wegen dem Aufwand, den Bau der Aufruf--wir reden hier von Mikrosekunden).[[
und$
aufdata.table
(also keine Kopie).data.table
macht nur eine flache Kopie vondt
wennsapply
/lapply
genannt wird, Dank der Umsetzung deras.list.data.table
. Im Fall vondata.frame
s, Kopien sind gemacht.