Full credit to @Tom Higginbottom who answered the hard part but a small modification I made to fix the Error in compareRaster(x, extent = FALSE, rowcol = FALSE, orig = TRUE, : different origin Just added a `raster_file <- projectRaster(raster_file, snap, method = "ngb")` into the loop and created a snap raster, with a large extent that covers the whole set of rasters snap <- raster(resolution = c(10,10), xmn = 180000, xmx = 300000, ymn = 60000, ymx = 100000, crs = "+init=epsg:27700") mosaicList <- function(rasList){ #Internal function to make a list of raster objects from list of files. ListRasters <- function(list_names) { raster_list <- list() # initialise the list of rasters for (i in 1:(length(list_names))){ grd_name <- list_names[i] # list_names contains all the names of the images in .grd format raster_file <- raster::raster(grd_name) raster_file <- projectRaster(raster_file, snap, method = "ngb") } raster_list <- append(raster_list, raster_file) # update raster_list at each iteration } #convert every raster path to a raster object and create list of the results raster.list <-sapply(rasList, FUN = ListRasters) # edit settings of the raster list for use in do.call and mosaic names(raster.list) <- NULL #####This function deals with overlapping areas raster.list$fun <- sum #raster.list$tolerance <- 0.1 #run do call to implement mosaic over the list of raster objects. mos <- do.call(raster::mosaic, raster.list) #set crs of output crs(mos) <- crs(x = raster(rasList[1])) return(mos) } raster_files <- list.files(path ="D:/results/gov-4p/stackoverflow",pattern = ".tif$",full.names = TRUE ) snap <- raster(resolution = c(10,10), xmn = 180000, xmx = 300000, ymn = 60000, ymx = 100000, crs = "+init=epsg:27700") national_layer <- mosaicList(raster_files )