我有一个2.5 GB的数据集,对于我的4GB内存而言非常大。我想知道将字符变量转换为因子是否会节省空间和处理时间。
我想在内部,因子将以数字形式存储,并带有水平查找表。但我不确定它是如何运作的。
答案 0 :(得分:16)
转换为factor不会节省空间,因为字符存储在哈希表中。请参阅1.10 The CHARSXP cache的R Internals部分。
如果您的代码需要转换为factor(运行回归,分类等),转换为factor可能会缩短处理时间,但如果您正在进行字符串操作,则不会缩短处理时间,因为它必须将因子转换回字符。所以这真的取决于你在做什么。
答案 1 :(得分:6)
将分类数据存储为因子而不是字符向量会在将数据写入磁盘时节省空间:
## 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"))