This is how you can do this better with
raster. Note the
value=1 argument, and also that that I changed your specification of the extent — as what you do is probably not correct.
library(raster) v <- shapefile(shapefile_path) ext <- extent(-180, 180, -65, 75) r <- raster(ext, res = 1/120) rr <- rasterize(v, r, value=1, background = 0)
There is no need for your last step, but you could have done
rr <- clamp(rr, 0, 1) # or rr <- rr > 0 # or rr <- reclassify(rr, cbind(1, Inf, 1))
raster::calc is not very efficient for simple arithmetic like this
It should be much faster to rasterize all vector data in one step, rather than in a loop, especially with large rasters like this (for which the program may need to write a temp file for each iteration).
To illustrate this solution with example data
library(raster) cds1 <- rbind(c(-180,-20), c(-140,55), c(10, 0), c(-140,-60)) cds2 <- rbind(c(-10,0), c(140,60), c(160,0), c(140,-55)) cds3 <- rbind(c(-125,0), c(0,60), c(40,5), c(15,-45)) v <- spLines(cds1, cds2, cds3) r <- raster(ncols=90, nrows=45) r <- rasterize(v, r, field=1)
To speed things up, you can use
terra (the replacement for raster)
library(raster) f <- system.file("ex/lux.shp", package="terra") v <- as.lines(vect(f)) r <- rast(v, ncol=75, nrow=100) x <- rasterize(v, r, field=1)
CLICK HERE to find out more related problems solutions.