gpt4 book ai didi

r - 使用过多内存从 {raster} 包中提取

转载 作者:行者123 更新时间:2023-12-03 07:02:56 25 4
gpt4 key购买 nike

我一直在使用raster包中的extract函数,使用shapefile定义的区域从光栅文件中提取数据。但是,我对该过程现在所需的内存量存在问题。我确实有大量 shapefile(~1000)。光栅文件很大(~1.6gb)

我的流程是:

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)

我可以做一些改变来减少内存负载吗?我尝试加载更少的 shapefile,该文件运行了大约 5 分钟,然后内存再次激增。它是一台 2.4GHz 四核计算机,配备 8GB 内存

最佳答案

我会这样做(未经测试):

## Clearly we need these packages, and their dependencies
library(raster)
library(rgeos)
shpfiles <- list.files(pattern="*.shp",full.names=TRUE)
ndvi <- raster("NDVI.dat")
## initialize an object to store the results for each shpfile
res <- vector("list", length(shpfiles))
names(res) <- shpfiles
## loop over files
for (i in seq_along(shpfiles)) {
## do the union
temp <- gUnionCascaded(shpfiles[i])
## extract for this shape data (and don't call it "extract")
extracted <- extract(ndvi,temp)
## further processing, save result
mean <- range(extracted, na.rm = TRUE )[1:2]
res[[i]] <- mean ## plus whatever else you need
}

上面 mc() 的返回值是什么意思根本不清楚,所以我忽略它。这将比您最初尝试的内存效率更高、速度更快。我怀疑这里是否值得使用并行的东西。

关于r - 使用过多内存从 {raster} 包中提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15694355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com