R не хватает памяти при присвоении значений для не разреженного массива - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь присвоить значения массиву, который не является разреженным, но я получаю следующую ошибку Error: cannot allocate vector of size 6.8 Gb. Я интерпретирую эту ошибку как нехватку памяти. Я не понимаю, почему я получаю эту ошибку. Размер массива в памяти должен быть одинаковым до и после присвоения ему новых значений. Таким образом, не должно быть проблем с выделением памяти. У меня два вопроса. 1) Почему у меня заканчивается память, когда размер объекта (в памяти) не меняется, и 2) Как я могу предотвратить эту ошибку?

Ниже приведен пример кода (но он может не воспроизводиться). в вашей системе как есть).

smoothprofile = c(0,0,244120250,1114063616,327761232,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
tmp1 = array(0,c(3000, 9000,  51)) # intialize non-sparse array
i = 500
j = 1

# Produces error
tmp1[i,j,1:length(smoothprofile)] = smoothprofile

# Let's try with a smaller array
tmp2 = array(0,c(500, 9000,  51))
object.size(tmp2) # check memory size
tmp2[i,j,1:length(smoothprofile)] = smoothprofile
object.size(tmp2) # check memory size
# Memory size does not change

Вывод кода:

> smoothprofile = c(0,0,244120250,1114063616,327761232,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
> tmp1 = array(0,c(3000, 9000,  51))
> i = 500
> j = 1
> # Produces error
> tmp1[i,j,1:length(smoothprofile)] = smoothprofile
Error: cannot allocate vector of size 10.3 Gb
> # Let's try with a smaller array
> tmp2 = array(0,c(500, 9000,  51))
> object.size(tmp2) # check memory size
1836000224 bytes
> tmp2[i,j,1:length(smoothprofile)] = smoothprofile
> object.size(tmp2) # check memory size
1836000224 bytes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...