The goal of scspatstat
is to convert spatstat
data structures to a generic common form that that can be used for conversion a wide variety of data structures.
This is work in progress and at a very early stage. More to come.
This is a basic example showing the component decomposition of a spatstat point pattern.
library(scspatstat)
#> Loading required package: silicate
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
data("chorley", package = "spatstat.data")
sc_object(chorley) %>% slice(2L)
#> # A tibble: 1 x 2
#> object_ mark
#> <chr> <fct>
#> 1 93b18381 larynx
data("nbfires", package= "spatstat.data")
sc_path(spatstat::as.owin(nbfires))
#> # A tibble: 6 x 4
#> object_ type ncoords_ path_
#> <chr> <chr> <int> <chr>
#> 1 1 polygonal 500 e3fa5d01
#> 2 2 polygonal 54 750dce73
#> 3 3 polygonal 92 8473c6e7
#> 4 4 polygonal 79 d339ae80
#> 5 5 polygonal 66 619e2045
#> 6 6 polygonal 80 590ebdd7
print(sc_coord(spatstat::as.owin(nbfires)), n = 5)
#> # A tibble: 871 x 2
#> x y
#> <dbl> <dbl>
#> 1 412 123
#> 2 415 124
#> 3 415 124
#> 4 416 123
#> 5 419 122
#> # ... with 866 more rows
With these three components working sc_coord
, sc_object
and sc_path
, and using the framework in sc
, the parent package can use these in generic form. We can already convert to PATH
and then on to other models for these polygonal forms in spatstat
.
library(scspatstat)
str(nbfires_path <- silicate::PATH(spatstat::as.owin(nbfires)))
#> List of 4
#> $ object :Classes 'tbl_df', 'tbl' and 'data.frame': 1 obs. of 5 variables:
#> ..$ type : chr "polygonal"
#> ..$ singular : chr "km"
#> ..$ plural : chr "km"
#> ..$ multiplier: num 0.404
#> ..$ object_ : chr "a03120f9"
#> $ path :Classes 'tbl_df', 'tbl' and 'data.frame': 6 obs. of 4 variables:
#> ..$ object_ : chr [1:6] "1" "2" "3" "4" ...
#> ..$ type : chr [1:6] "polygonal" "polygonal" "polygonal" "polygonal" ...
#> ..$ ncoords_: int [1:6] 500 54 92 79 66 80
#> ..$ path_ : chr [1:6] "9029371a" "cc508bdf" "649fd705" "74cc44ea" ...
#> $ path_link_vertex:Classes 'tbl_df', 'tbl' and 'data.frame': 871 obs. of 2 variables:
#> ..$ path_ : chr [1:871] "9029371a" "9029371a" "9029371a" "9029371a" ...
#> ..$ vertex_: chr [1:871] "803ce52e" "cbe70647" "e3e059ac" "dc1adfe2" ...
#> $ vertex :Classes 'tbl_df', 'tbl' and 'data.frame': 871 obs. of 3 variables:
#> ..$ x : num [1:871] 412 415 415 416 419 ...
#> ..$ y : num [1:871] 123 124 124 123 122 ...
#> ..$ vertex_: chr [1:871] "803ce52e" "cbe70647" "e3e059ac" "dc1adfe2" ...
#> - attr(*, "class")= chr [1:2] "PATH" "sc"
#> - attr(*, "join_ramp")= chr [1:4] "object" "path" "path_link_vertex" "vertex"
SC(nbfires_path)
#> $object
#> # A tibble: 1 x 5
#> type singular plural multiplier object_
#> <chr> <chr> <chr> <dbl> <chr>
#> 1 polygonal km km 0.404 a03120f9
#>
#> $object_link_edge
#> # A tibble: 865 x 2
#> edge_ object_
#> <chr> <chr>
#> 1 9af05d8c 1
#> 2 a3aa5a4b 1
#> 3 c717aff4 1
#> 4 26827710 1
#> 5 76f55d42 1
#> 6 ce933960 1
#> 7 74035c99 1
#> 8 151cfa9f 1
#> 9 5f23185d 1
#> 10 dbafa8ae 1
#> # ... with 855 more rows
#>
#> $edge
#> # A tibble: 865 x 3
#> .vertex0 .vertex1 edge_
#> <chr> <chr> <chr>
#> 1 803ce52e cbe70647 9af05d8c
#> 2 cbe70647 e3e059ac a3aa5a4b
#> 3 e3e059ac dc1adfe2 c717aff4
#> 4 dc1adfe2 f0b92282 26827710
#> 5 f0b92282 916115bf 76f55d42
#> 6 916115bf 1e06a473 ce933960
#> 7 1e06a473 e3f8d802 74035c99
#> 8 e3f8d802 e7e9da37 151cfa9f
#> 9 e7e9da37 3dee1ea0 5f23185d
#> 10 3dee1ea0 c875483e dbafa8ae
#> # ... with 855 more rows
#>
#> $vertex
#> # A tibble: 871 x 3
#> x y vertex_
#> <dbl> <dbl> <chr>
#> 1 412 123 803ce52e
#> 2 415 124 cbe70647
#> 3 415 124 e3e059ac
#> 4 416 123 dc1adfe2
#> 5 419 122 f0b92282
#> 6 424 123 916115bf
#> 7 430 125 1e06a473
#> 8 431 133 e3f8d802
#> 9 436 132 e7e9da37
#> 10 436 128 3dee1ea0
#> # ... with 861 more rows
#>
#> attr(,"class")
#> [1] "SC" "sc"
(Note that owin
is supported only on its own, and points ppp
and line segments psp
are supported separately. We need a way to intermingle structured "windows" and the underlying patterns, but for now I consider that a higher specialization than silicate itself.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.