origDTThreads <- data.table::setDTthreads(2L)
origNcpus <- options(Ncpus = 2L)
# using just matrix
N <- 10
xrange <- yrange <- c(-50, 50)
starts <- cbind(x = stats::runif(N, xrange[1], xrange[2]),
y = stats::runif(N, yrange[1], yrange[2]))
moved <- crw(starts, stepLength = 5, stddev = 10)
plot(starts, col = rainbow(10), pch = 19)
points(moved, col = rainbow(10))
# as SpatVector
agent <- terra::vect(starts)
moved <- crw(agent, stepLength = 5, stddev = 10)
movedAgain <- crw(moved, stepLength = 5, stddev = 10)
terra::plot(agent)
terra::plot(moved, add = TRUE, col = "red")
terra::plot(movedAgain, add = TRUE, col = "green")
# 1000x faster!! -- returnMatrix = TRUE
agentOrig <- agent
reps <- 1e2
system.time({
for (i in 1:reps) agent <- crw(agent, stepLength = 5, stddev = 10, returnMatrix = TRUE)
})
agent <- agentOrig
system.time({
for (i in 1:reps) agent <- crw(agent, stepLength = 5, stddev = 10)
})
# as sp
if (requireNamespace("sp")) {
agent <- sp::SpatialPoints(starts)
spdf <- crw(agent, stepLength = 5, stddev = 10)
spdfNew <- crw(spdf, stepLength = 5, stddev = 10)
terra::plot(spdf, pch = 19)
terra::points(spdfNew, col = "blue", pch = 19)
}
# clean up
data.table::setDTthreads(origDTThreads)
options(Ncpus = origNcpus)
Run the code above in your browser using DataLab