无法更新大型矩阵的矩阵条目

问题描述 投票:0回答:1

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

任何人都可以解释为什么会发生这种情况,我是否可以完成此操作?

谢谢。

r matrix memory
1个回答
0
投票

NA
属于
logical
类型。
1
的类型为“double”。

typeof(NA)
#> [1] "logical"
typeof(1)
#> [1] "double"

当您使用

NA
初始化矩阵时,它将是
logical
类型。如果您尝试将该矩阵的一个元素更改为
double
,它将升级整个矩阵,这需要创建一个新矩阵。
double
对象需要的内存是相同大小的
logical
对象的两倍。您显然没有足够的内存来容纳该大小的
double
矩阵。

© www.soinside.com 2019 - 2024. All rights reserved.