为何R语言DataFrame的内存占用大小与其维度相关?
为什么R语言中DataFrame的内存占用和维度相关?
先看测试代码及结果:
> z <- matrix(runif(10000)) > data.frame(matrix(z, nrow=200) ) %>% object.size() 86608 bytes > data.frame(matrix(z, nrow=20) ) %>% object.size() 140608 bytes
核心原因在于R中DataFrame本质是列向量的列表,每个列都带有额外的元数据开销(比如类型标记、属性信息等),而非像矩阵那样是连续存储的单一数据块。
具体到这个测试:
- 矩阵设为200行时,对应列数为
10000/200 = 50列 - 矩阵设为20行时,对应列数为
10000/20 = 500列
所有元素都是double类型,每个double占8字节,10000个元素的基础数据大小固定为 10000*8 = 80000 字节。两者的内存差异完全来自列的元数据开销:
- 50列的总开销:
86608 - 80000 = 6608字节 - 500列的总开销:
140608 - 80000 = 60608字节
列数越多,累加的元数据总开销就越大,最终导致DataFrame的内存占用显著上升。
简单总结:DataFrame的内存 = 元素本身的存储大小 + 每列的元数据开销总和。当总元素数固定时,列数越多,内存占用就越高。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

