我在R中的RAM用完了一个data.table,其中包含~100M行和40列充满双精度数。我天真的想法是,我可以通过降低精度来减少数据表的对象大小。逗号后不需要15位数。我玩四舍五入,但我们知道
round(1.68789451154844878,3)
给出
1.6879999999999999
并没有帮助。因此,我将值转换为整数。但是,如下面的小例子所示,对于数字向量,从8000040字节到4000040字节只有50%的减少,并且当进一步降低精度时,这种减少不会再增加。
有没有更好的方法呢?
set.seed(1)
options(digits=22)
a1 = rnorm(10^6)
a2 = as.integer(1000000*(a1))
a3 = as.integer(100000*(a1))
a4 = as.integer(10000*(a1))
a5 = as.integer(1000*(a1))
head(a1)
head(a2)
head(a3)
head(a4)
head(a5)
给
[1] -0.62645381074233242 0.18364332422208224 -0.83562861241004716 1.59528080213779155 0.32950777181536051 -0.82046838411801526
[1] -626453 183643 -835628 1595280 329507 -820468
[1] -62645 18364 -83562 159528 32950 -82046
[1] -6264 1836 -8356 15952 3295 -8204
[1] -626 183 -835 1595 329 -820
和
object.size(a1)
object.size(a2)
object.size(a3)
object.size(a4)
object.size(a5)
给
8000040 bytes
4000040 bytes
4000040 bytes
4000040 bytes
4000040 bytes