我正在 R(栅格包)中使用 MODIS 栅格数据,我想知道为什么当两个栅格文件相乘时栅格的大小会变大 7000 倍。就我而言,一个栅格是简单的 MODIS 栅格(值在 0 到 255(整数)之间),另一个栅格是一种模板(0 和 1(整数))。所以我不明白为什么光栅要这么大?当尝试使用 writeRaster 保存栅格时,这是一个大问题,因为我的 R session 不断崩溃。
我的代码如下所示:
a <- list.files('All_MODIS_files_of_one_year.tif')
for (day in 1:length(a)){
ra <- raster(a[day])
ra_reduce <- ra * s
ra
的对象大小为 12064 字节,s
的对象大小为 11984 字节。 ra_reduce
的对象大小为 93777512 字节。当我最终堆叠一整年时,文件几乎变成了 40 GB 大。 :(
我尝试了round
函数,尝试将@file@datanotation
设置为整数,但没有任何帮助。
有谁知道如何解决这个问题?
最佳答案
ra
(可能还有s
)的对象大小非常小,因为它在内存中没有单元值。如果您show(ra)
,您将看到数据位于磁盘上(在文件中)。相乘后的值将存储在内存中。您可以使用 calc
或 overlay
等允许将结果写入文件的方法或使用 writeRaster
来避免这种情况。即:
x <- overlay(ra, s, fun=function(x,y){x*y}, filename='file.tif')
或者
ra_reduce <- ra * s
ra_reduce <- writeRaster(ra_reduce, filename='ra_reduce.tif')
要减小文件大小,您(或许)可以使用datatype
参数。
关于R 栅格乘法 - 为什么栅格大小大幅增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50881957/