Barry
Barry

Reputation: 739

How to write rasters after stacking them?

There are several raster files that I want to manipulate and then write them again.

rasterfiles   <- list.files("C:\\data", "*.envi", full.names = TRUE)
d1 <-  overlay(stack(rasterfiles ), 
               fun=function(x) movingFun(x, fun=mean, n=3, na.rm=TRUE))
d2=unstack(d1)

I am grateful to any idea on how we write d2 (rasters)

Upvotes: 5

Views: 10185

Answers (2)

Robert Hijmans
Robert Hijmans

Reputation: 47051

Plannapus solution should work. Alternatively, you can either write to a single file in one step:

 rasterfiles   <- list.files("C:\\data", "*.envi", full.names = TRUE)
 d1 <-  overlay(stack(rasterfiles ), 
           fun=function(x) movingFun(x, fun=mean, n=3, na.rm=TRUE), 
           filename='output.tif' )

Or to multiple files in two steps

 rasterfiles   <- list.files("C:\\data", "*.envi", full.names = TRUE)
 d1 <-  overlay(stack(rasterfiles ), 
           fun=function(x) movingFun(x, fun=mean, n=3, na.rm=TRUE))
 d2 <- writeRaster(d1, 'out.tif', bylayer=TRUE)

Upvotes: 8

plannapus
plannapus

Reputation: 18749

 writeRaster(d1, file="d1.nc") #other file formats such as .envi work as well

works since d1 is one single raster and not a list of rasters: indeed the result of overlay is one single raster (see ?overlay).
Additionally the concept of stack is precisely to take several rasters having one layer and produce one raster with several layer.
Eventually if you really want to save each layer separately, you can unstack your raster prior to writing.
In which case:

d2 <- unstack(d1)
outputnames <- paste(seq_along(d2), ".nc",sep="")
for(i in seq_along(d2)){writeRaster(d2[[i]], file=outputnames[i])}

Upvotes: 10

Related Questions