## ----include = FALSE----------------------------------------------------------
library(knitr)
opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
options(rmarkdown.html_vignette.check_title = FALSE)

## ----setup--------------------------------------------------------------------
library(groupedHyperframe.random)

## ----echo = FALSE, results = 'asis'-------------------------------------------
c(
  '', 'Forward pipe operator', '`?base::pipeOp` introduced in `R` 4.1.0', 
  '`CRAN`, `R`', 'The Comprehensive R Archive Network', 'https://cran.r-project.org',
  '`coords`', '$x$- and $y$-coordinates', '`spatstat.geom:::ppp`',
  '`diag`', 'Diagonal matrix', '`base::diag`',
  '`groupedHyperframe`', 'Grouped hyper data frame', '`groupedHyperframe::as.groupedHyperframe`',
  '`hypercolumns`, `hyperframe`', '(Hyper columns of) hyper data frame', '`spatstat.geom::hyperframe`',
  '`marks`, `marked`', '(Having) mark values', '`spatstat.geom::is.marked`',
  '`pmax`', 'Parallel maxima', '`base::pmax`',
  '`ppp`, `ppp.object`', 'Point pattern', '`spatstat.geom::ppp.object`',
  '`recycle`', 'Recycling', 'https://r4ds.had.co.nz/vectors.html#scalars-and-recycling-rules',  
  '`rlnorm`', 'Log normal random variable', '`stats::rlnorm`', 
  '`rMatClust`', 'Matern\'s cluster process', '`spatstat.random::rMatClust`',
  '`rmvnorm_`', 'Multivariate normal random variable', '`groupedHyperframe.random::rmvnorm_`; `MASS::mvrnorm`',
  '`rnbinom`', 'Negative binomial random variable', '`stats::rnbinom`',
  '`rpoispp`', 'Poisson point pattern', '`spatstat.random::rpoispp`',
#  '`rStrauss`', 'Strauss process', '`spatstat.random::rStrauss`',
  '`superimpose`', 'Superimpose', '`spatstat.geom::superimpose`',
  '`var`, `cor`, `cov`', 'Variance, correlation, covariance', '`stats::var`, `stats::cor`, `stats::cov`'
) |>
  matrix(nrow = 3L, dimnames = list(c('Term / Abbreviation', 'Description', 'Reference'), NULL)) |>
  t.default() |>
  as.data.frame.matrix() |> 
  kable()

## -----------------------------------------------------------------------------
set.seed(125); r = .rppp(rMatClust(kappa = c(10, 5), mu = c(8, 4), scale = c(.15, .06)))
# plot(r) # suppressed for aesthetics

## -----------------------------------------------------------------------------
set.seed(125); r1 = .rppp(
  rMatClust(kappa = c(10, 5), mu = c(8, 4), scale = c(.15, .06)), 
  rlnorm(meanlog = c(3, 5), sdlog = c(.4, .2)),
  rnbinom(size = 4, prob = .3) # shorter parameter recycled
)

## -----------------------------------------------------------------------------
set.seed(62); r2 = .rppp(
  rpoispp(lambda = c(3, 6)),
  rlnorm(meanlog = c(3, 5), sdlog = c(.4, .2)),
  rnbinom(size = c(4, 6), prob = c(.3, .1))
)

## -----------------------------------------------------------------------------
spatstat.geom::superimpose(r1, r2)

## -----------------------------------------------------------------------------
(p = data.frame(kappa = c(3,2), scale = c(.4,.2), mu = c(10,5), 
                meanlog = c(3,5), sdlog = c(.4,.2)))

## -----------------------------------------------------------------------------
set.seed(39); (p. = rmvnorm_(n = 3L, mu = p, Sigma = list(
  kappa = .2^2, scale = .05^2, mu = .5^2, 
  meanlog = .1^2, sdlog = .01^2)) |> 
    within.list(expr = {
      kappa = pmax(kappa, 1 + .Machine$double.eps)
      mu = pmax(mu, 1 + .Machine$double.eps)
      scale = pmax(scale, .Machine$double.eps)
      sdlog = pmax(sdlog, .Machine$double.eps)
    }))

## -----------------------------------------------------------------------------
set.seed(37); (n = sample.int(n = 4L, size = 3L, replace = TRUE)) 

## -----------------------------------------------------------------------------
set.seed(76); (r = p. |> 
  with.default(expr = {
    grouped_rppp(
      rMatClust(kappa = kappa, scale = scale, mu = mu), 
      rlnorm(meanlog = meanlog, sdlog = sdlog),
      n = n
    )
  }))