R:减少数字/精度以节省RAM?

时间:2016-07-29 07:15:41

标签: r

我在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

0 个答案:

没有答案