R-如何改进光栅堆栈的慢速操作?

R-如何改进光栅堆栈的慢速操作?,r,performance,math,stack,raster,R,Performance,Math,Stack,Raster,我正在处理一些GeoTiff光栅,总共有60个文件(可能更多),它们相对较大:分辨率约为7800 x 7700,分辨率为30m,总文件大小约为120MB(陆地卫星8图像)。我正在尝试对其中六幅图像进行一个简单的数学方程计算(请参见代码末尾): # create some artificial data # this is used within a loop with all files (~60) in the directory r <- raster(nrows=7801, n

我正在处理一些GeoTiff光栅,总共有60个文件(可能更多),它们相对较大:分辨率约为7800 x 7700,分辨率为30m,总文件大小约为120MB(陆地卫星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) 
我想知道是否有办法优化脚本?为什么我的计算速度这么慢?是什么导致了警告消息以及如何修复它


非常感谢

您有6个
rad.mult.fact
和5个
rad.add.fact
。这就是警告信息的来源。似乎您正试图将传感器DN转换为大气反射的顶部:任务R可以完成,但非常不适合。考虑使用Landsat模块在Grand GIS中执行这一任务:它比在R中手动地从L中实现L LAM= MLQCAL+AL更健壮,因为它可以使用Landsat的MTL元数据文件并从那里获得所需的参数(记住这些是带特定的)!:您需要一个shell脚本,其中只有一个1级循环遍历60个图像(使用图像基名称)和相应的MTL元数据文件,其余部分由Grass处理。请参阅:和,干杯
Warning message: 
In (s.dn * rad.mult.fact) + rad.add.fact : 
number of items to replace is not a multiple of replacement length