I am modelling the response of a bird (skylark) to various climatic and topographical variables in the program R. Using the predict function I predicted the abundance per pixel (see below for code). I would now like to export my three rasters into ArcGIS 10.2? How do I do that?

Can i add the ref coords. using ArcGis or is it easy to do in R? Is there a faster way predict the density? (I am happy to map on density without the errors initially?

 # Load the raster layers of the predictors for the entire landscape as a stack.
nsw.stack <- stack(list.files(pattern="tif$", full.names=FALSE))
names(nsw.stack) <- c("riv","lake","ndvi","temp","prec","dem")

class       : RasterStack 
dimensions  : 2129, 1905, 4055745, 6  (nrow, ncol, ncell, nlayers)
resolution  : 0.008926991, 0.008926991  (x, y)
extent      : 55.99709, 73.003, 43.99541, 63.00097  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
names       : riv,     lake,    ndvi,    temp,    prec,      dem 

Then I used the predict function to map the data using my best ranked model (t5)

skylark.psi <- predict(t5, type="state", newdata=nsw.stack)

plot(skylark.psi, ylab="psi - GLM")

> skylark.psi
class       : RasterStack 
dimensions  : 2129, 1905, 4055745, 4  (nrow, ncol, ncell, nlayers)
resolution  : 0.008926991, 0.008926991  (x, y)
extent      : 55.99709, 73.003, 43.99541, 63.00097  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
names       :    Predicted,           SE,        lower,        upper 
min values  : 2.987641e-05, 1.275741e-05, 1.293780e-05, 6.899167e-05 
max values  :    779.48502,     85.93247,    675.88093,    898.97033 

you can write your raster object to a file using writeRaster from the raster package. Most file formats will be supported by ArcGIS, personnally I use tif a lot.

writeRaster(skylark.psi, file="skylark.tif")

This will create a multiband raster. You can use bylayer=TRUE for multiple single band raster outputs .

Your projection could be specified afterwards using Define projection in ArcGIS when you add it to the dataframe (or you can use "proj4string" in R).

proj4string(skylark.psi) <- CRS("+init=epsg:4326") 

note that 4326 is the epsg code for your WGS84 CRS. See spatialreference.org to get PROJ4 or epsg code for your CRS.

  • Do I have to unstack the raster object prior to using writeRaster? Or could I write code like this: writeRaster(skylark.psi$Predicted, file="skylark.tiff") – I.Stirs Jun 10 '16 at 12:39
  • see my edit for multiple single bands instead of single multiband. – radouxju Jun 10 '16 at 13:07
  • Thanks radouxju. How do I know which of my single band raster outputs is which? – I.Stirs Jun 10 '16 at 13:18
  • thanks figured it our. Where do you look for the epsg code? Is there a website. – I.Stirs Jun 10 '16 at 14:29

You could just use the "filename" argument in the raster::predict function. To bring up help for raster predict specifically use ?raster::predict and you can see the additional arguments that are available. It can be confusing because predict is an R generic and you are effectively calling two predict functions, with two sets of arguments, one for your actual model and one for raster.

predict(t5, type="state", newdata=nsw.stack, filename = "skylark.tiff", progress="window") 

This will skip the step of creating a temporary object and then using writeRaster to write it to a different file and format. Using the file extension is enough for defining most common formats and you should not have to use the format argument. If the projection is defined for the raster stack it will be assigned to the output file as well. The "..." argument allows you to pass specific arguments to a given models predict function.

  • Thanks Jeffrey. So in the code above once the raster has been "predicted" it will be added to my stack, and to my drive where my rasters that form the stack are stored? Is that correct? – I.Stirs Jun 10 '16 at 14:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.