Я вычисляю корреляцию между двумя наборами данных, но из-за большого размера данных (10 ГБ), в то время как моя оперативная память составляет всего 6 ГБ. Я столкнулся с проблемой памяти. Интересно, как можно разбить мой код?Как обрабатывать массив массивов в R?
dir1 <- list.files("D:sdr", "*.bin", full.names = TRUE)
dir2 <- list.files("D:dsa", "*.img", full.names = TRUE)
file_tot<-array(dim=c(1440,720,664,2))
for(i in 1:length(dir1)){
file_tot[,,i,1] <- readBin(dir1[i], numeric(), size = 4 ,n = 1440 * 720 , signed = T)
file_tot[,,i,2] <- readBin(dir2[i], integer(), size = 2 ,n = 1440 * 720 , signed = F)
file_tot[,,i,2] <- file_tot[,,i,2]*0.000030518594759971
file_tot[,,i,2][file_tot[,,i,2] == 9999 ] <- NA
}
result<-apply(file_tot,c(1,2),function(x){cor(x[,1],x[,2])})
Но получил эту ошибку:
Error: cannot allocate vector of size 10.3 Gb
In addition: Warning messages:
1: In file_tot[, , i, 1] <- readBin(dir1[i], numeric(), size = 4, n = 1440 * :
Reached total allocation of 16367Mb: see help(memory.size)
2: In file_tot[, , i, 1] <- readBin(dir1[i], numeric(), size = 4, n = 1440 * :
Reached total allocation of 16367Mb: see help(memory.size)
3: In file_tot[, , i, 1] <- readBin(dir1[i], numeric(), size = 4, n = 1440 * :
Reached total allocation of 16367Mb: see help(memory.size)
4: In file_tot[, , i, 1] <- readBin(dir1[i], numeric(), size = 4, n = 1440 * :
Reached total allocation of 16367Mb: see help(memory.size)
, если я изменю от 7 до 10, я должен изменить что-нибудь еще? – sacvf
Вы имеете в виду от 7 до 720? Да, это должно быть так, и ваши файлы img состоят из 2 байтовых целых чисел, и вы делаете что-то с отсутствующими значениями. Я оставил это. –
no Я имел в виду количество столбцов, чтобы увеличить их, чтобы получить время, и это 1440 не 1140 – sacvf