首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象大小差异

对象大小差异
EN

Stack Overflow用户
提问于 2011-10-12 08:57:10
回答 2查看 1.1K关注 0票数 2

我试图弄清楚为什么我保存为.rda的某些数组似乎比相同大小的其他数组占用更多的内存。下面是两个具有相同大小、类型和尺寸的对象x和y。当我保存每一个时,一个是41Mb,另一个是6Mb。有没有人能想到为什么会发生这种情况?

代码语言:javascript
复制
> dim(x)
[1]    71    14 10000
> dim(y)
[1]    71    14 10000 
> class(x)
[1] "array"
> class(y)
[1] "array"  
> object.size(y)
79520208 bytes
> object.size(x)
79520208 bytes
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-12 11:04:54

如果使用savesaveRDS命令保存,则默认使用压缩。如果你在向量中有不同的内容,它们会有不同的压缩方式...

尝试使用savecompress=FALSE,然后再进行比较...

在下面的示例中,文件大小几乎相差700倍:

代码语言:javascript
复制
set.seed(42)
x <- runif(1e6)  # random values should not compress well...
y <- rep(0, 1e6) # zeroes should compress very well...
object.size(x) # 8000040 bytes
object.size(y) # 8000040 bytes

save('x', file='x.rds')
save('y', file='y.rds')
file.info(c('x.rds', 'y.rds'))$size
#[1] 5316773    7838

save('x', file='x.rds', compress=FALSE)
save('y', file='y.rds', compress=FALSE)
file.info(c('x.rds', 'y.rds'))$size
#[1] 8000048 8000048
票数 6
EN

Stack Overflow用户

发布于 2011-10-12 09:30:27

它们都可以是字符数组,也可以是列表或数据帧。或者一个可以是字符(一个或两个字节是最小的元素大小,otehr可以是数字(每个元素8个字节),或者较大的字符可以具有较大的字符元素.....或者其他各种可能性。我得到的结果与你的相同:

代码语言:javascript
复制
x <- array(runif( 71* 14 *10000), dim = c(71 ,   14, 10000) )
 save(x, file="test.rda")
 object.size(x)
# 79520208 bytes  and the file is over 50 MB
x <- array(sample(letters, 71* 14 *10000, replace=TRUE), dim = c(71 ,   14, 10000) )
 save(x, file="test2.rda")
 object.size(x)
# 79521456 bytes   and the file is around 8 MB
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7734183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档