spatstat (version 1.52-1)

rthin: Random Thinning


Applies independent random thinning to a point pattern.


rthin(X, P, …, nsim=1, drop=TRUE)



A point pattern (object of class "ppp" or "lpp") that will be thinned.


Data giving the retention probabilities, i.e. the probability that each point in X will be retained. Either a single number, or a vector of numbers, or a function(x,y) in the R language, or a function object (class "funxy" or "linfun"), or a pixel image (object of class "im" or "linim").

Additional arguments passed to P, if it is a function.


Number of simulated realisations to be generated.


Logical. If nsim=1 and drop=TRUE (the default), the result will be a point pattern, rather than a list containing a point pattern.


A point pattern (object of class "ppp" or "lpp") if nsim=1, or a list of point patterns if nsim > 1.


The algorithm for random thinning was changed in spatstat version 1.42-3. Set spatstat.options(fastthin=FALSE) to use the previous, slower algorithm, if it is desired to reproduce results obtained with earlier versions.


In a random thinning operation, each point of the pattern X is randomly either deleted or retained (i.e. not deleted). The result is a point pattern, consisting of those points of X that were retained.

Independent random thinning means that the retention/deletion of each point is independent of other points.

The argument P determines the probability of retaining each point. It may be

a single number,

so that each point will be retained with the same probability P;

a vector of numbers,

so that the ith point of X will be retained with probability P[i];

a function P(x,y),

so that a point at a location (x,y) will be retained with probability P(x,y);

an object of class "funxy" or "linfun",

so that points in the pattern X will be retained with probabilities P(X);

a pixel image,

containing values of the retention probability for all locations in a region encompassing the point pattern.

If P is a function P(x,y), it should be ‘vectorised’, that is, it should accept vector arguments x,y and should yield a numeric vector of the same length. The function may have extra arguments which are passed through the argument.


Run this code
  plot(redwood, main="thinning")
  # delete 20% of points
  Y <- rthin(redwood, 0.8)
  points(Y, col="green", cex=1.4)

  # function
  f <- function(x,y) { ifelse(x < 0.4, 1, 0.5) }
  Y <- rthin(redwood, f)

  # pixel image
  Z <-, Window(redwood))
  Y <- rthin(redwood, Z)

  # pattern on a linear network
  A <- runiflpp(30, simplenet)
  B <- rthin(A, 0.2)
  g <- function(x,y,seg,tp) { ifelse(y < 0.4, 1, 0.5) }
  B <- rthin(A, linfun(g, simplenet))
# }

Run the code above in your browser using DataCamp Workspace