我的 R 中的 RAM 用完了,data.table 包含 ~100M 行和 40 列全双打。我天真的想法是我可以通过降低精度来减少数据表的对象大小。逗号后不需要 15 位数字。我通过四舍五入来玩,但正如我们所知
round(1.68789451154844878,3)
Run Code Online (Sandbox Code Playgroud)
给
1.6879999999999999
Run Code Online (Sandbox Code Playgroud)
并没有帮助。因此,我将值转换为整数。但是,如下面的小示例所示,对于数值向量,从 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)
Run Code Online (Sandbox Code Playgroud)
给
[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
Run Code Online (Sandbox Code Playgroud)
和
object.size(a1)
object.size(a2)
object.size(a3)
object.size(a4)
object.size(a5)
Run Code Online (Sandbox Code Playgroud)
给
8000040 bytes
4000040 bytes
4000040 bytes
4000040 bytes
4000040 bytes
Run Code Online (Sandbox Code Playgroud)