
Basic Usage of NLMR
Marco Sciaini & Craig E.Simpkins
2026-04-23
Source:vignettes/getstarted.Rmd
getstarted.RmdNLMR is a R package designed to generate
neutral landscape models (NLMs), simulated landscapes used to explore
landscape scale ecological patterns and processes. The NLMR
package was designed with a similar philosophy to the Python package
NLMpy (see Etherington, Holland, and
O’Sullivan 2014), offering a general numeric framework allowing
for a high degree of flexibility. Most of the common NLMs, as described
by the relevant literature, can be produced using NLMR. Additionally,
NLMR allows users to merge multiple landscapes, classify landscape
elements categorically and measure basic landscape level metrics. All
NLMs produced take the form of two-dimensional raster arrays with
specified row and column dimensions and cell values ranging between 0
and 1. By returning raster arrays, NLMs are easily integrated into the
workflow of many useful spatial analysis packages, notably the
raster package.
For further information on neutral landscape models, the authors goals for this package, and additional use case examples please see the associated publication Sciani, Fritsch, Scherer and Simpkins (2018).
Basic landscape generation
NLMR supplies 16 NLM algorithms. The algorithms differ
from each other in spatial autocorrelation, from no autocorrelation
(random NLM) to a constant gradient (planar gradients) (see Palmer 1992).
The 16 NLM algorithms are:
- distance gradient
- edge gradient
- hierarchical curdling
- wheyed hierarchical curdling
- midpoint displacement
- neighbourhood clustering
- planar gradient
- random
- random cluster nearest-neighbour
- random element
- random mosaic fields
- random polygonal landscapes
- random percolation
- random rectangular cluster
- spatially correlated random fields (Gaussian random fields)
- two-dimensional fractional Brownian motion
The basic syntax used to produce a NLM landscape is:
nlm_modeltype(ncol, nrow, resolution, ...)
For example, to produce a simple random neutral landscape one could use the following code:
x <- NLMR::nlm_random(100, 100)
plot(x)
Merging landscapes
Multiple NLM rasters can be merged to create new landscape patterns. A single primary or base raster can be merged with any number of additional secondary rasters, with optional scaling factors used to control the influence of the secondary rasters.
# Create primary landscape raster
pL <- NLMR::nlm_edgegradient(ncol = 100,
nrow = 100)
plot(pL)
# Create secondary landscape rasters
sL1 <- NLMR::nlm_distancegradient(ncol = 100,
nrow = 100,
origin = c(10, 10, 10, 10))
sL2 <- NLMR::nlm_random(ncol = 100,
nrow = 100)
# Merge rasters with scaling factors
mL1 <- pL + (sL1 + sL2 * 0.2)
plot(mL1)
Classifying categories
Landscape rasters generated by NLMR contain continuous
values between 0 and 1, though these can be converted into categorical
values using util_classify.
nr <- NLMR::nlm_edgegradient(ncol = 100,
nrow = 100)
nr_classified <- util_classify(nr, n = 4)
raster::plot(nr_classified)