Skip to contents

Write a SpatRaster to a file.


# S4 method for SpatRaster,character
writeRaster(x, filename, overwrite=FALSE, ...)





character. Output filename. Can be a single filename, or as many filenames as nlyr(x) to write a file for each layer


logical. If TRUE, filename is overwritten


additional arguments for for writing files. See Details


SpatRaster. This function is used for the side-effect of writing values to a file.

See also

see writeCDF for writing NetCDF files.


In writeRaster, and in other methods that generate SpatRasters, options for writing raster files to disk can be provided as additional arguments or, in a few cases, as the wopt argument (a named list) if the additional arguments are already used for a different purpose. See terraOptions to get or set default values. The following options are available:

datatypevalues accepted are "INT1U", "INT2U", "INT2S", "INT4U", "INT4S", "FLT4S", "FLT8S". With GDAL >= 3.5 you can also use "INT8U" and "INT8S". And with GDAL >= 3.7 you can use also use "INT1S". See gdal to discover the GDAL version you are using. The first three letters indicate whether the datatype is an integer (whole numbers) of a real number ("float", decimal numbers), the fourth character indicates the number of bytes used for each number. Higher values allow for storing larger numbers and/or more precision; but create larger files. The "S" or "U" indicate whether the values are signed (both negative and positive) or unsigned (zero and positive values only).
filetypefile format expresses as GDAL driver names. If this argument is not supplied, the driver is derived from the filename. You can use gdal(drivers=TRUE) to see what drivers are available in your installation
gdalGDAL driver specific datasource creation options. See the GDAL documentation. For example, with the GeoTiff file format you can use gdal=c("COMPRESS=DEFLATE", "TFW=YES").
tempdirthe path where temporary files are to be written to.
progresspositive integer. If the number of chunks is larger, a progress bar is shown.
memfracnumeric between 0 and 0.9 (higher values give a warning). The fraction of available RAM that terra is allowed to use.
memmaxmemmax - the maximum amount of RAM (in GB) that terra can use when processing a raster dataset. Should be less than what is detected (see mem_info, and higher values are ignored. Set it to a negative number or NA to ignore this value).
namesoutput layer names.
NAflagnumeric. value to represent missing (NA or NaN) values. See note
scalenumeric. Cell values written to disk are divided by this value (default is 1). See scoff
offsetnumeric. Value that is subtracted from the cell values written to disk (default is 0). See scoff
verboselogical. If TRUE debugging information is printed
stepspositive integers. In how many steps (chunks) do you want to process the data (for debugging)
todisklogical. If TRUE processing operates as if the dataset is very large and needs to be written to a temporary file (for debugging).


GeoTiff files are, by default, written with LZW compression. If you do not want compression, use gdal="COMPRESS=NONE".

When writing integer values the lowest available value (given the datatype) is used to represent NA for signed types, and the highest value is used for unsigned values. This can be a problem with byte data (between 0 and 255) as the value 255 is reserved for NA. To keep the value 255, you need to set another value as NAflag, or do not set a NAflag (with NAflag=NA)


r <- rast(nrows=5, ncols=5, vals=1:25)

# create a temporary filename for the example
f <- file.path(tempdir(), "test.tif")

writeRaster(r, f, overwrite=TRUE)

writeRaster(r, f, overwrite=TRUE, gdal=c("COMPRESS=NONE", "TFW=YES"), datatype='INT1U')

## Or with a wopt argument:

writeRaster(r, f, overwrite=TRUE, wopt= list(gdal=c("COMPRESS=NONE"), datatype='INT1U'))

## remove the file