微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R 保存大小非常不同的相似对象会导致文件大小相同

如何解决R 保存大小非常不同的相似对象会导致文件大小相同

我在保存 dist-class 对象(使用 saveRDS)和获得比预期大得多的文件时遇到问题。可以在 https://github.com/kstagaman/stackoverflow-help

找到重现此问题的代码

下面读取了一个 phyloseq 对象,其中包含一个非常大的社区矩阵 (47 x 1,060,929)

library(phyloseq)

obj.size <- function(x) {paste("Object size:",format(object.size(x),units = "auto"))}
f.size <- function(x) {paste("File size:",round(file.size(x) / 1024^2,1),"Mb")}

ps <- readRDS("example_phyloseq.rds")

接下来,我创建了一个距离矩阵来确定社区差异 样本之间应该产生一个 47 x 47 的矩阵

dist.mat <- phyloseq::distance(ps,method = "bray") # creating a distance matrix
attributes(dist.mat)$Size
## [1] 47

好的,正如预期的那样,但是……

cat(obj.size(dist.mat),sep = "\n")
## Object size: 453.3 Mb

对于这种大小的距离矩阵来说,这出奇地大(比如 量级更大)

经过调查我意识到这是因为 attributes(dist.mat)$call 很大,因为它包括一个 来自原始社区矩阵的值。

dist.mat.small <- dist.mat
attributes(dist.mat.small)$call <- NULL
cat(obj.size(dist.mat.small),sep = "\n")
## Object size: 12.5 Kb

好的,看起来不错。更接近我对 尺寸。但是……当我尝试保存时……

saveRDS(dist.mat,file = "distance_matrix_original.rds")
saveRDS(dist.mat.small,file = "distance_matrix_small.rds")

cat(f.size("distance_matrix_original.rds"),sep = "\n")
## File size: 112.5 Mb
cat(f.size("distance_matrix_small.rds"),sep = "\n")
## File size: 112.5 Mb

这里发生了什么?为什么对象的文件大小相同 大小不一样?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。