我正在 32GB RAM Windows PC 上处理大型矩阵。对于一定大小的矩阵,我可以分配给矩阵的各个单元格,这在这里:
> d_time <- matrix(NA, 20000, 100000)
> d_time[1,1]
[1] NA
> d_time[1,1] <- 1
> d_time[1,1]
[1] 1
但是,对于较大的矩阵,这会在这里引发错误:
> d_time <- matrix(NA, 30000, 100000)
> d_time[1,1]
[1] NA
> d_time[1,1] <- 1
Error: cannot allocate vector of size 22.4 Gb
> object.size(d_time)
12000000216 bytes
RStudio 中第二个矩阵的大小为 11.2GB。
任何人都可以解释为什么会发生这种情况,我是否可以完成此操作?
谢谢。
NA
属于 logical
类型。 1
的类型为“double”。
typeof(NA)
#> [1] "logical"
typeof(1)
#> [1] "double"
当您使用
NA
初始化矩阵时,它将是 logical
类型。如果您尝试将该矩阵的一个元素更改为 double
,它将升级整个矩阵,这需要创建一个新矩阵。 double
对象需要的内存是相同大小的 logical
对象的两倍。您显然没有足够的内存来容纳该大小的 double
矩阵。