R 加速光栅上的循环

R 加速光栅上的循环,r,r-raster,R,R Raster,我有一个包含30000个光栅的大数据集。我的目标是使用位于光栅中的多边形提取平均值,并使用从光栅文件名提取的光栅值和日期创建一个文件 通过执行以下循环,我成功地做到了这一点: for (i in 1:length(rasters2014)){ a <- raster(rasters2014[i]) ext[i] <- as.vector(extract(a, poligon2, fun=mean, na.rm=TRUE, df=F)) } output2 = data.frame(e

我有一个包含30000个光栅的大数据集。我的目标是使用位于光栅中的多边形提取平均值,并使用从光栅文件名提取的光栅值和日期创建一个文件

通过执行以下循环,我成功地做到了这一点:

for (i in 1:length(rasters2014)){
a <- raster(rasters2014[i])
ext[i] <- as.vector(extract(a, poligon2, fun=mean, na.rm=TRUE, df=F))
}
output2 = data.frame(ext, filename=filename2014)
for(1中的i:长度(光栅2014)){

a如果光栅都正确对齐(相同的ncol、nrow、范围、原点、分辨率),您可以通过查看第一个文件来尝试识别要提取的“单元号”,然后 基于这些单元格进行提取。这可以加快处理速度,因为光栅不需要计算要提取的单元格。类似于:

rast1 <- raster(rasters2014[1])
cells <- extract(rast1, poligon2, cellnumbers = TRUE, df = TRUE)[,"cells"]
ext <- list()

for (i in 1:length(rasters2014)){
  a <- raster(rasters2014[i])
  ext[[i]] <- as.vector(extract(a, cells, fun=mean, na.rm=TRUE, df=F))
}

rast1如果光栅都正确对齐(相同的ncol、nrow、范围、原点、分辨率),您可以通过查看第一个文件来尝试识别要提取的“单元号”,然后
基于这些单元格进行提取。这可以加快处理速度,因为光栅不需要计算要提取的单元格。类似于:

rast1 <- raster(rasters2014[1])
cells <- extract(rast1, poligon2, cellnumbers = TRUE, df = TRUE)[,"cells"]
ext <- list()

for (i in 1:length(rasters2014)){
  a <- raster(rasters2014[i])
  ext[[i]] <- as.vector(extract(a, cells, fun=mean, na.rm=TRUE, df=F))
}

rast1如果多边形不重叠(在大多数情况下它们不重叠),则需要另一条路径

library(raster)
x <- rasterize(poligon2, rasters2014[1])
s <- raster::stack(rasters2014, quick = TRUE)
z <- zonal(s, x, "mean")
库(光栅)

x如果多边形不重叠(在大多数情况下它们不重叠),则可以选择另一条路径

library(raster)
x <- rasterize(poligon2, rasters2014[1])
s <- raster::stack(rasters2014, quick = TRUE)
z <- zonal(s, x, "mean")
库(光栅)

感谢您的帮助!无论采用何种方法,我都尝试过所有建议的解决方案,并且计算时间基本相同。因此,我想不可能显著加快计算过程。

感谢您的帮助!我尝试过所有建议的解决方案和计算时间无论采用何种方法,结果都是一样的。因此,我想不可能显著加快计算过程。

看起来您可能正在循环中增长
ext
(这不是一个好主意!)。请尝试将其初始化为所需的长度,或者使用不同的循环,例如:
out=lappy(光栅2014,函数(x){as.vector(extract(光栅(x),poligon2,fun=mean,na.rm=TRUE,df=F)))
谢谢您的帮助!我已经尝试了您的循环,但不幸的是它没有加快操作速度。我不能缩小循环的长度,因为我必须对所有30000个元素都这样做。如果每个光栅都有一个波段,您可以将光栅堆叠成多波段光栅,然后调用
提取
一次(无循环)获取所有带的多边形内的平均值。看起来您可能在循环中增长
ext
(这不是一个好主意!)。尝试将其初始化为所需的长度,或者使用不同的循环,例如:
out=lappy(rasters2014,函数(x){as.vector(extract(raster(x),poligon2,fun=mean,na.rm=TRUE,df=F)))
谢谢您的帮助!我已经尝试了您的循环,但不幸的是它没有加快操作速度。我不能缩小循环的长度,因为我必须对所有30000个元素都这样做。如果每个光栅都有一个波段,您可以将光栅堆叠成多波段光栅,然后调用
提取
一次(无循环)获取多边形内所有条带的平均值。