为啥 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。但是,当我使用 saveRDScompress = 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 为啥会这样?

请问,unix中ls命令如何显示文件以GB为单位的大小

MySql:20000行记录中只显示5行,为啥?

为啥 node.js 配置文件的大小会是数 GB? webstorm 处理的方式

为啥我的程序在字节数组中保存 1.5Gb 的内存?