sk_sub_find | R Documentation |
If a sk grid g
has missing values (NA
s) but the set of non-NA
points form a
complete (regular) sub-grid, this function finds its grid lines, resolution, and
dimensions. If no eligible sub-grids are found, the function returns NULL
.
sk_sub_find(g, gdim = NULL)
g |
logical vector, sk grid, or any grid object accepted by |
gdim |
integer vector, the grid dimensions (in order 'y', 'x') |
A sub-grid is only eligible if it contains ALL of the non-NA
points in g
and none
of the NA
s. For example if a single point missing from the sub-grid, or a single non-NA
point lies outside the sub-grid, the function will fail to detect any sub-grids and return
NULL
. If no points are NA
, the function returns indices for the full grid.
The returned list contains the following named elements:
ij
the grid line numbers of the sub-grid with respect to g
res_scale
the resolution scaling factor (relative increase in grid line spacing of g
)
gdim
the number of y and x grid lines in the sub-grid
As in sk
, each of these is given in the 'y', 'x' order.
Users can also pass the logical vector returned by !is.na(g)
instead of g
, in which
case argument gdim
must also be specified. This can be much faster with large grids.
NULL
or list of information about the location and spacing of the sub-grid
within g
(see details)
Other indexing functions:
sk_mat2vec()
,
sk_rescale()
,
sk_sub_idx()
,
sk_vec2mat()
# define a grid and example data
gdim = c(50, 53)
pars = utils::modifyList(sk_pars(gdim), list(eps=1e-12))
g = sk_sim(gdim, pars)
plot(g)
# define a super-grid containing the original data and make sure we can find it
g_big = sk_rescale(g, down=3)
plot(g_big)
print(sk_sub_find(g_big))
# define a smaller sub-grid at random
spacing = sapply(floor(gdim/10), function(x) 1 + sample.int(x, 1))
gdim_sg = sapply(floor( (gdim - 1) / spacing), function(x) sample.int(x, 1))
ij_first = sapply(gdim - ( spacing * gdim_sg ), function(x) sample.int(x, 1))
# find index of sub-grid lines and vectorized index of points
ij_sg = Map(function(idx, r, n) seq(idx, by=r, length.out=n), idx=ij_first, r=spacing, n=gdim_sg)
names(ij_sg) = c('i', 'j')
is_sg = sk_sub_idx(gdim, ij_sg, idx=FALSE)
# assign values to the sub-grid points
g_sub = sk(gdim)
g_sub[is_sg] = g[is_sg]
plot(g_sub, zlab='sub-grid')
# call the function and check for expected results
sub_result = sk_sub_find(g_sub)
all.equal(unname(sub_result[['gdim']]), gdim_sg)
all.equal(unname(sub_result[['ij']]), unname(ij_sg))
# sub grids with side length 1 have no spacing defined along that dimension
spacing[gdim_sg==1] = NA
# check consistency in spacing
all.equal(unname(sub_result[['res_scale']]), spacing)
# can also call on the vector and supply gdim separately
identical(sub_result, sk_sub_find(!is.na(g_sub), dim(g_sub)))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.