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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage