Я использовал функцию extract
из пакета raster
для извлечения данных из растровых файлов, используя область, определенную шейп-файлами. Однако у меня проблемы с объемом памяти, который сейчас требуется для этого процесса. У меня есть большое количество шейп-файлов (~ 1000). Растровые файлы большие (~ 1,6 ГБ)
Мой процесс:
shp <- mclapply(list.files(pattern="*.shp",full.names=TRUE), readShapePoly,mc.cores=6)
ndvi <- raster("NDVI.dat")
mc<- function(y) {
temp <- gUnionCascaded(y)
extract <- extract(ndvi,temp)
mean <- range(extract, na.rm=T )[1:2]
leng <- length(output)
}
output <- lapply(shp, mc)
Могу ли я внести какие-нибудь изменения, чтобы уменьшить нагрузку на память? Я попытался загрузить меньше шейп-файлов, которые работали около 5 минут, прежде чем объем памяти снова увеличился. Это четырехъядерный компьютер 2,4 ГГц с оперативной памятью 8 ГБ.
extract
фактически является многоядерной внутри при использовании многоугольников. Вам не нужно ничего делать, чтобы воспользоваться этим фактом, кромеrequire( parallel ); beginCluster( detectCores()-1 )
. При извлечении по 1000 полигонов вы можете получить значительное преимущество в скорости, сделав это (но этот вопрос касается памяти, а не скорости). 29.03.2013