Gab*_*iel 1 compression r r-factor
如果您的.csv文件中大多数变量的大多数值都是重复的,则该文件的最终文件大小将不会很小,因为没有压缩。但是,如果将.csv文件读入 R 并将适当的变量强制转换为因子,那么数据帧或 tibble 是否会产生某种压缩优势?在整个数据帧或小标题中重复因素似乎是一个很好的压缩机会,但我不知道这是否真的发生。
我尝试在网上搜索这个问题,但没有找到答案。我不确定在哪里寻找因素的实施方式。
您要查找的文档位于?factor帮助页面:
factor返回“factor”类的对象,该对象具有一组长度为 x 的整数代码,具有模式字符的“levels”属性和唯一的 (!anyDuplicated(.)) 条目。
因此,因子实际上只是一个integer向量以及整数与其标签/级别之间的映射(存储为属性)。如果有重复,可以很好地节省空间!
然而,后来我们看到:
笔记
在 R 的早期版本中,如果重复的比例很小,则将字符数据存储为因子会更节省空间。然而,相同的字符串现在共享存储,因此在大多数情况下差异很小。(整数值存储在 4 个字节中,而每个对字符串的引用需要 4 或 8 个字节的指针。)
因此,在旧版本的 R 因子中,空间效率可能更高,但新版本优化了character向量存储,因此这种差异并没有那么大。
我们可以看到当前的差异:
n = 1e6
char = sample(letters, size = n, replace = T)
fact = factor(char)
object.size(char)
# 8001504 bytes
object.size(fact)
# 4002096 bytes
Run Code Online (Sandbox Code Playgroud)