R - 如何使用光栅堆栈改善慢速操作?

时间:2015-02-06 22:12:25

标签: r performance math stack raster

我正在处理一些总共有60个文件的GeoTiff栅格(可能更多),这些栅格相对较大:分辨率在30m res时大约为7800 x 7700,总文件大小约为120MB(Landsat 8图像)。我试图在六个这样的图像的堆栈上进行简单的数学方程式计算(请参见代码的结尾):

# create some artificial data 
# this is used within a loop with all files (~60) in the directory 

r <- raster(nrows=7801, ncols=7711) 
r[] <- runif(ncell(r),0,65000) 
s.dn <- stack(r,r,r,r,r,r) 

# Define calibration factors 
rad.mult.fact <- c(0.012852, 0.013161, 0.012128, 
0.010227, 0.006258, 0.001556) 

rad.add.fact  <- c(-64.2618, -65.8048, -60.6386, 
-51.1339, -31.2914) 

#convert DN to TOA radiance 
s.rad <- (s.dn * rad.mult.fact) + rad.add.fact

#write file 
writeRaster(s.rad, filename='teste.tif', format="GTiff", overwrite=TRUE) 

计算速度非常慢,在我的双核系统上使用8GB RAM大约需要10分钟。在计算过程中,我的临时目录上写有三个2.8GB的文件。最后,到最后我收到一个警告:

Warning message: 
In (s.dn * rad.mult.fact) + rad.add.fact : 
number of items to replace is not a multiple of replacement length 

我想知道是否有办法优化该脚本?为什么在我的情况下计算速度如此之慢?是什么导致警告信息以及如何解决?

非常感谢!

0 个答案:

没有答案