Насколько я понимаю, bigmemory
работает только с матрицами, а не с многомерными массивами, но вы можете сохранить многомерный массив в виде списка матриц.
gc
- это просто сборщик мусора, и вы нена самом деле не нужно вызывать его, так как он будет вызываться автоматически, но в руководстве также говорится:
Может быть полезно вызвать gc после удаления большого объекта, поскольку это может вызвать запрос Rчтобы вернуть память операционной системе.
Я думаю, что наиболее полезный пакет для вашей задачи будет ff
.Вот короткий пример, иллюстрирующий силу пакета ff
, который хранит данные на диске и почти не влияет на память.
Массивы инициализации с base-R:
p <- array(NA, dim=c(1825, 38, 1000),
dimnames=list(NULL, NULL, as.character(seq(1, 1000, 1))))
format(object.size(p), units="Mb")
"264,6 Мб"
Таким образом, в целом ваши начальные массивы уже заняли бы почти до 5 ГБ памяти, что доставит вам неприятностис тяжелыми вычислениями.
Массивы инициализации с помощью ff:
library(ff)
myArr <- ff(NA, dim=c(1825, 38, 1000),
dimnames=list(NULL, NULL, as.character(seq(1, 1000, 1))),
filename="arr.ffd", vmode="logical", overwrite = T)
format(object.size(myArr), units="Mb")
[1] "0,1 Мб"
Проверка на равенство:
euqals <- list()
for (i in 1:dim(p)[1]) {
euqals[[i]] <- all.equal(p[i,,],
myArr[i,,])
}
all(unlist(euqals))
[1] ИСТИНА