将字符列转换为因子可以节省内存吗?

Ada*_*NYC 16 r dataframe

我有一个2.5 GB的数据集,这对我的4GB内存非常大.我想知道将字符变量转换为因子是否会节省空间和处理时间.

我想在内部,因子将以数字形式存储,并具有级别的查找表.但我不确定它是如何运作的.

Jos*_*ich 16

转换为factor不会节省空间,因为字符存储在哈希表中.见1.10 CHARSXP缓存[R内幕.

如果您的代码需要转换为factor(运行回归,分类等),转换为factor可能会缩短处理时间,但如果您正在进行字符串操作,则不会改善处理时间,因为它必须转换因子回到一个角色.所以这真的取决于你在做什么.

  • 我真的不明白这一点.当你做这样的事情时:`x < - rep(c("x","y","z"),1e6)```object.size(x)`的大小是`` object.size(因子(X))`.我做了些蠢事吗?或者我在某种程度上错过了这一点? (4认同)

Jos*_*ien 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"))
Run Code Online (Sandbox Code Playgroud)

  • RAM中的空间和HDD上的空间是不同的.检查`print(object.size(animalsChar),units ="Mb")`. (4认同)