Werden Faktoren in data.table effizienter gespeichert als Zeichen?
Ich hatte zwar irgendwo gelesen (kann mich nicht erinnern, wo), dass Faktoren nicht effizienter waren als Zeichenvektoren in data.table. Ist das wahr? Ich überlegte, ob ich weiterhin Faktoren verwenden sollte, um verschiedene Vektoren in data.table zu speichern. Ein ungefährer Test mitobject.size
scheint etwas anderes anzuzeigen.
chars <- data.table(a = sample(letters, 1e5, TRUE)) # chars (not really)
string <- data.table(a = sample(state.name, 1e5, TRUE)) # strings
fact <- data.table(a = factor(sample(letters, 1e5, TRUE))) # factor
int <- data.table(a = sample(1:26, 1e5, TRUE)) # int
mbs <- function(...) {
ns <- sapply(match.call(expand.dots=TRUE)[-1L], deparse)
vals <- mget(ns, .GlobalEnv)
cat('Sizes:\n',
paste('\t', ns, ':', round(sapply(vals, object.size)/1024/1024, 3), 'MB\n'))
}
## Get approximate sizes?
mbs(chars, string, fact, int)
# Sizes:
# chars : 0.765 MB
# string : 0.766 MB
# fact : 0.384 MB
# int : 0.382 MB