.rda文件的大小增长删除某些行
我有一个大名单的.rda文件,那这个样子后(在本例中999).rda文件的大小增长删除某些行
[[1]] Null
[[2]] Null
...
[[1000]] (Some data)
...
第一K
空行是由于代码中的错误而创建的,所以我决定删除所有1:K
行。保存文件后,它的尺寸变大了:在1GB之前是<,之后是> 16GB。那怎么可能?如何解决它?
我可以想像,问题是,编辑列表收到了1值N
,它包含从K+1
到N
只值,但它是如此不同的编辑之后?如果这是问题,如何清除索引?
删除空值后,该文件可能需要不同的压缩类型。它可能是未压缩的,然后在相同的压缩方案下重新压缩,尽管它应该有所不同,因为列表要小很多倍。
从?save
...保存的文件可以被解压缩,并根据不同的压缩方案重新压缩(看看resaveRdaFiles一种方式,从R内这样做)。
所以,当我在本Bolker的答案z2
对象运行resaveRdaFiles
,它得到一个好大块较小
file.info("tmp2.rda")[,1]
# [1] 2666373
tools::resaveRdaFiles("tmp2.rda")
file.info("tmp2.rda")[,1]
# [1] 2210736
有趣,但我有点怀疑。 'resaveRdaFiles'对'tmp.rda'有什么作用?默认的压缩方法是'gzip'(参见'save“),而'resaveRdaFiles'则尝试了几种不同的压缩方案并选择最好的压缩方案。 – 2014-11-02 18:47:07
@BenBolker - 在tmp.rda上的大小是2212664 – 2014-11-02 19:05:17
我不能轻易地复制这个,但我提供了这个模板:或许,正如@RichardScriven上面的评论,你可以告诉我们你是如何删除NULL
值?
化妆数据:
set.seed(101)
z1 <- replicate(1000,runif(1000),simplify=FALSE)
z1[1:500] <- replicate(500,NULL)
保存并检查文件大小:
save("z1",file="tmp.rda")
file.size("tmp.rda")
## [1] 2666278
只保留最近500个元素:
z2 <- z1[501:1000]
save("z2",file="tmp2.rda")
file.size("tmp2.rda")
## [1] 2666249
获取不断所谓稍微小一些。
用numeric(0)
代替NULL
使结果稍微大一些。
z3 <- z1
z3[1:500] <- replicate(500,numeric(0))
save("z3",file="tmp3.rda")
file.size("tmp3.rda")
## [1] 2666290
'file.size'找不到。忘记它在哪里...'utils'? – 2014-11-02 18:20:34
我有它在基地。它可能是平台特定的吗?我认为''file.info()'应该在任何地方工作。 – 2014-11-02 18:44:24
不,在Linux上没有file.size – Tim 2014-11-03 06:30:18
这是有趣的,但一个(小!)重复的例子(使用'保存() '和'file.size()')将会非常有用。 – 2014-11-02 18:02:25
你用什么代码去除NULL。这些不一定是“行”,除非你有一个数据框开始。行索引失败的例子'replicate(5,NULL)[3,]' – 2014-11-02 18:05:02