R语言中object.size与save保存的对象大小差异问题排查求助
排查R对象保存后文件大小异常的方法
检查对象是否包含隐藏引用或外部指针
部分R对象(如data.table、ggplot对象、带externalptr的对象)会包含外部资源引用,object.size()不会统计这类数据,但save()会完整保存关联内容。可通过以下代码查看对象结构:# 查看对象顶层结构 str(myobject, max.level = 1) # 若为data.table,检查是否存在外部索引 if (inherits(myobject, "data.table")) print(myobject$index)验证内存占用的精确值
object.size()仅为估算值,可能遗漏嵌套对象大小。用pryr包的函数计算更准确:install.packages("pryr") pryr::object_size(myobject)该函数会递归统计所有嵌套元素与引用的内存,结果更贴近实际保存后的文件大小。
检查保存时的压缩设置
save()默认开启压缩,若压缩失效或级别过低会导致文件膨胀。显式指定压缩参数重新测试:# 用最高级别压缩保存 save(myobject, file = "./myobject_compressed.RData", compress = "xz") # 查看新文件大小 file.info("./myobject_compressed.RData")$size若压缩后文件大小接近
object.size()的结果,说明之前的保存未正常启用压缩。排查列表内的异常元素
列表可能包含重复大对象或临时缓存内容,遍历元素单独计算大小定位问题:# 计算列表每个元素的大小(以MB为单位) sapply(myobject, function(x) format(object.size(x), units = "MB"))替换为
saveRDS()测试save()会保存环境关联的额外引用,saveRDS()仅序列化单个对象,可避免关联内容被意外保存:saveRDS(myobject, file = "./myobject.rds") file.info("./myobject.rds")$size若此文件大小正常,说明原
save()操作可能附带保存了其他关联对象。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

