tests/testthat/test-bru_sf.R

test_that("sf gorillas lgcp vignette", {
  ##  skip("Feature not yet implemented")

  skip_on_cran()
  local_bru_safe_inla()
  skip_if_not_installed("sf")

  # Code adapted from the lgcp vignette with an additional mesh construction
  # step instead of using the mesh provided in the gorillas data.

  # All sp objects in the example are replaced with sf equivalents.

  data(gorillas_sf, package = "inlabru", envir = environment())

  # ## Not needed anymore for this test, but kept for future reference
  # # Bug in st_as_sf making check_ring_dir=TRUE have no effect, as
  # # st_as_sfc.SpatialPolygons ignores it. To get around it, need to convert to
  # # sfc_POLYGON first, and then do a separate st_sfc call, which does use
  # # check_ring_dir.
  # # No effect:
  # b1 <- sf::st_as_sf(gorillas$boundary, check_ring_dir = TRUE)
  # # st_sfc gives the proper effect:
  # b2 <- b1
  # b2$geometry <- sf::st_sfc(sf::st_geometry(b2$geometry),
  #   check_ring_dir = TRUE)
  #
  # gorillas_sf$boundary <- b2

  ## Build boundary information:
  boundary <- list(
    gorillas_sf$boundary,
    NULL
  )

  ## Build the mesh:
  mesh_sf <- fm_mesh_2d_inla(
    boundary = boundary,
    max.edge = c(0.54, 0.97),
    min.angle = c(30, 21),
    ## Safeguard against large meshes.
    max.n = c(48000, 16000),
    ## Don't build a huge mesh!
    max.n.strict = c(128000, 128000),
    ## Filter away adjacent points.
    cutoff = 0.01,
    ## Offset for extra boundaries, if needed.
    offset = c(0.73, 1.55),
    ## Build mesh in this crs:
    crs = fm_crs(gorillas_sf$nests)
  )

  # library(ggplot2)
  # ggplot() +
  #   gg(mesh_sf) +
  #   geom_sf(data = gorillas_sf$boundary, alpha = 0.2, fill = "blue")

  matern <- INLA::inla.spde2.pcmatern(mesh_sf,
    prior.sigma = c(0.1, 0.01),
    prior.range = c(0.1, 0.01)
  )

  cmp <- geometry ~ mySmooth(geometry, model = matern) +
    Intercept(1)

  expect_error(
    fit <- lgcp(
      cmp,
      data = gorillas_sf$nests,
      samplers = gorillas_sf$boundary,
      domain = list(geometry = mesh_sf)
    ),
    NA
  )
})

Try the inlabru package in your browser

Any scripts or data that you put into this service are public.

inlabru documentation built on April 3, 2025, 10:54 p.m.