为啥 RStudio/R 中显示为 1 GB 大小的对象会被 RData 或 RDS 文件格式以更大的大小保存,即使没有压缩?
Posted
技术标签:
【中文标题】为啥 RStudio/R 中显示为 1 GB 大小的对象会被 RData 或 RDS 文件格式以更大的大小保存,即使没有压缩?【英文标题】:Why do objects in RStudio/R which display as 1 GB in size get saved by RData or RDS file formats at much larger sizes, even at no compression?为什么 RStudio/R 中显示为 1 GB 大小的对象会被 RData 或 RDS 文件格式以更大的大小保存,即使没有压缩? 【发布时间】:2018-06-04 09:51:57 【问题描述】:我目前在RStudio
中有一个列表对象,它在环境列表中显示为1.2 GB
。但是,当我使用 saveRDS
和 compress = FALSE
函数保存时,保存的对象大小显示为近 4 GB。
我的列表对象大小的报告是错误的还是发生了其他事情?我认为如果一个对象在 R 中占用了一定的空间,它应该在没有压缩的情况下以相同的大小保存?我知道 *** 上有一些与此类似的问题,但似乎没有人能解释为什么即使没有压缩它也会有所不同。
【问题讨论】:
str(yourlist, 1)
说什么,即该列表中存储了什么?另外,您确定没有将默认值更改为ascii = TRUE
?请显示用于文件导出的命令。
我认为这可能是因为我内部有一个lm
回归对象,它携带来自全球环境的东西。我没有碰ASCII。这可能是为什么?
【参考方案1】:
由于需要有效的内存管理,R 中对象大小的计算变得复杂。您的列表可能包含在内存中未考虑的元素,因为它们可能是共享资源,但在导出时需要包含在内。 object.size
的帮助文件指出:
内存分配的具体应归属于哪些部分 哪个对象不明确。这个功能只是提供了一个粗略的 指示:对于原子向量,它应该是相当准确的,但是 例如,不检测列表的元素是否共享。 (考虑了字符向量元素之间的共享, 但不是在单个对象中的字符向量之间。)
【讨论】:
以上是关于为啥 RStudio/R 中显示为 1 GB 大小的对象会被 RData 或 RDS 文件格式以更大的大小保存,即使没有压缩?的主要内容,如果未能解决你的问题,请参考以下文章
我已经加载了一个 1.5GB 的 csv 文件并成功加载了我的表大小是 250MB 为啥会这样?