Подтвердить что ты не робот

Преобразует ли столбцы символов в факторы сохранения памяти?

У меня есть набор данных объемом 2,5 Гбайт, что довольно велико для моей памяти 4 ГБ. Интересно, будет ли преобразование символьных переменных в факторы экономии пространства и времени обработки.

Я бы предположил, что внутренне факторы будут храниться в числовом виде с помощью таблицы поиска для уровней. Но я не уверен, как это работает.

4b9b3361

Ответ 1

Преобразование в коэффициент не будет экономить место, поскольку символы хранятся в хеш-таблице. См. Раздел 1.10 Кэш CHARSXP R Internals.

Преобразование в коэффициент может улучшить время обработки, если вашему коду нужно будет преобразовать в коэффициент (выполнить регрессию, классификацию и т.д.), но это не улучшит время обработки, если вы выполняете строковые манипуляции, потому что это должно будет преобразовать коэффициент обратно в символ. Так что это действительно зависит от того, что вы делаете.

Ответ 2

Сохранение категориальных данных как факторов, а не как векторов символов, экономит место при записи данных на диск:

## Create 2 two-million length vectors, one character and one factor
animalsChar <- c(rep("giraffe", 1e6), rep("pygmy chimpanzee", 1e6))
animalsFac  <- factor(animalsChar)

## Save them to two ".Rdata" files
charFile <- "char.Rdata"
facFile <-  "fac.Rdata"
save(animalsChar, file = "char.Rdata")
save(animalsFac, file = "fac.Rdata")

## Compare the sizes of the two files
file.info("char.Rdata", "fac.Rdata")["size"]
#             size
# char.Rdata 87390
# fac.Rdata   7921


## Clean up
unlink(c("char.Rdata", "fac.Rdata"))