89_Simple
89_Simple

Reputation: 3805

disaggregating raster causes insufficient disk space

I am trying to disaggregate a raster using terra package. My original raster is:

library(terra)
  
my_raster 
class       : SpatRaster 
dimensions  : 180, 360, 1  (nrow, ncol, nlyr)
resolution  : 1, 1  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 
source      : EHF2_2020_max.nc_rotated.nc 
varname     : X2020 
name        : X2020 
  

I want to drop the resolution to the following target raster

target_raster
class       : SpatRaster 
dimensions  : 21600, 43200, 1  (nrow, ncol, nlyr)
resolution  : 0.008333333, 0.008333333  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 
source      : GDP_PPP_30arcsec_v3.nc 
varname     : GDP_PPP (Gross Domestic Production (GDP) (PPP)) 
name        :                             GDP_PPP_3 
unit        : constant 2011 international US dollar
  

When I did this, I get below error:

disagg_raster <- disagg(my_raster, fact = c(21600,43200))
 
Error: [disagg] insufficient disk space (perhaps from temporary files?)
   

I have a fresh R session and other than these two objects, nothing else is loaded in my environment. What is causing this error?

However, when I disaggregate raster using resample, I do not get any memory issue

resample_raster <- resample(my_raster, target_raster, method='bilinear')
    

Upvotes: 2

Views: 347

Answers (1)

Robert Hijmans
Robert Hijmans

Reputation: 47026

I get below error:

disagg_raster <- disagg(my_raster, fact = c(21600,43200))
# Error: [disagg] insufficient disk space (perhaps from temporary files?)

That says there is not enough disk space to write the file. Output SpatRasters are are written to disk if they are deemed too large to keep in memory. As you do not provide a filename argument, the file would go to the tempdir() folder and that does not have enough disk space.

This is happening because you use trying to create a monster of a raster (easy to do and see for a raster that has no cell values):

library(terra)
r <- rast()
disagg(r, fact = c(21600,43200))
#class       : SpatRaster 
#dimensions  : 3888000, 15552000, 1  (nrow, ncol, nlyr)
#resolution  : 2.314815e-05, 4.62963e-05  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : lon/lat WGS 84 
 

It appears that you misunderstood the fact argument. To get the spatial resolution of your target raster you can do:

disagg(r, fact = 120)
#class       : SpatRaster 
#dimensions  : 21600, 43200, 1  (nrow, ncol, nlyr)
#resolution  : 0.008333333, 0.008333333  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : lon/lat WGS 84 

That is still big enough, but it should not create problems.

Upvotes: 2

Related Questions