Reputation: 739
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
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
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