Я пытаюсь присвоить значения массиву, который не является разреженным, но я получаю следующую ошибку 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