Home > Software engineering >  How to retain file location information ('terra::sources") in raster files using the packa
How to retain file location information ('terra::sources") in raster files using the packa

Time:01-28

I noticed that if I load a raster from a file that is stored on local hard disk, using terra package and then load the workspace later, the spatraster object does not have any data associated with it. Is there a way to keep all the information associated with the spatraster object while saving and loading the workspace?

Here is a the example code to illustrate the issue:

    library(terra)
    
    f <- system.file("ex/elev.tif", package="terra")
    
    r <- rast(f)
    
    #This produces the following output
    #> r
    #class       : SpatRaster 
    #dimensions  : 90, 95, 1  (nrow, ncol, nlyr)
    #resolution  : 0.008333333, 0.008333333  (x, y)
    #extent      : 5.741667, 6.533333, 49.44167, 50.19167  (xmin, xmax, 
                   ymin, #ymax)
    #coord. ref. : lon/lat WGS 84 (EPSG:4326) 
    #source      : elev.tif 
    #name        : elevation 
    #min value   :       141 
    #max value   :       547
    
    sources(r)#this works
    
    save.image("delete_if_found.RData")
    
    rm(list = ls())
    
    load("delete_if_found.RData")
    r
    #which returns the spatraster as
    
    #class       : SpatRaster
    #Error in .External(list(name = "CppMethod__invoke_notvoid", address = \<pointer: (nil)\>,  :
    #NULL value passed as symbol address`

I am currently importing all the relevant files again after loading the workspace, is there any other way to go about it?

CodePudding user response:

Hello Aniruddha Marathe and welcome to SO!

If you take a look in the terra package documentation, you will see this:

[...] They cannot be recovered from a saved R session either or directly passed to nodes on a computer cluster. Generally, you should use writeRaster to save SpatRaster objects to disk (and pass a filename or cell values to cluster nodes)

So, you will have to load the SpatRaster each time you want to use it by executing terra::rast(system.file("ex/elev.tif", package="terra")), instead of doing it with the load() function.

Hope this helps

  • Related