splitSpataObject.RdThis function splits a SPATA2 object into multiple sub-objects based on a
specified grouping variable.
splitSpataObject(
object,
grouping,
naming = "{sample_name}_{group_name}",
spatial_proc = TRUE,
reduce = FALSE,
verbose = NULL
)An object of class SPATA2 or, in case of S4 generics,
objects of classes for which a method has been defined.
Character value. The grouping variable of interest. Use
getGroupingOptions() to obtain all valid input options.
Character value. A glue expression based on which the respective new sample names are created. See details for more information.
Logical value. Indicates whether the new sub-object is
processed spatially. If TRUE, a new tissue outline is identified based
on the remaining observations via identifyTissueOutline(). Then,
spatial annotations are tested on being located on either of the remaining
tissue sections. If they are not, they are removed.
If FALSE, these processing steps are skipped. Generally speaking, this is
not recommended. Only set to FALSE, if you know what you're doing.
Only relevant, if barcodes is not NULL.
A logical value indicating whether to reduce the SPATA2 sub-objects after splitting
via reduceSpataObject(). Default is FALSE.
Logical. If TRUE, informative messages regarding
the computational progress will be printed.
(Warning messages will always be printed.)
A named list of SPATA2 sub-objects split by the specified grouping.
The input for naming defaults to the original sample name suffixed with the
name of the group for which the sub-object contains the data. Both are separated
with a '_'. Sample name can be accessed via 'sample_name' and group name
can be accessed via 'group_name'.
Afterwards, if grouping is not 'tissue_section' a new tissue outline is
identified for every sub-object using identifyTissueOutline() with default input.
library(SPATA2)
library(tidyverse)
library(patchwork)
# ----- Example 1: subsetSpataObject()
object <- loadExampleObject("UKF313T", meta = TRUE)
barcodes_keep <-
getMetaDf(object) %>%
filter(bayes_space %in% c("B3", "B2", "B1")) %>%
pull(barcodes)
object_sub <- subsetSpataObject(object, barcodes = barcodes_keep)
show(object)
show(object_sub)
plotSpatialAnnotations(object) # plots all annotations
plotSpatialAnnotations(object_sub) # subsetting affects everything by default
ids <- getSpatAnnIds(object)
ids_sub <- getSpatAnnIds(object_sub)
# use patchwork to compare plots
plot_orig <-
plotSurface(object, color_by = "bayes_space", outline = T) +
ggpLayerSpatAnnOutline(object, ids = ids)
plot_sub <-
plotSurface(object_sub, color_by = "bayes_space", outline = T) +
ggpLayerSpatAnnOutline(object_sub, ids = ids_sub)
plot_orig + plot_sub
# ----- Example 2: splitSpataObject()
# uses subsetSpataObject() in the background
object_mouse <- loadExampleObject("LMU_MCI", process = TRUE, meta = TRUE)
orig_frame <- ggpLayerFrameByCoords(object_mouse)
ids <- getSpatAnnIds(object_mouse)
plotSurface(object_mouse, color_by = "tissue_section", pt_clr = "lightgrey") +
ggpLayerSpatAnnOutline(object_mouse, ids = ids) +
ggpLayerSpatAnnPointer(object_mouse, ids = ids, ptr_lengths = "0.45mm", text_dist = 10, text_size = 7)
obj_list <- splitSpataObject(object_mouse, grouping = "tissue_section")
# present resulting sub-objects
purrr::map(obj_list, .f = ~ .x)
# present remaining ids
purrr::map(obj_list, .f = ~ getSpatAnnIds(.x))
# show surface plot with all remaining spatial annotations
purrr::map(obj_list, .f = ~ plotSurface(.x) + ggpLayerSpatAnnOutline(.x) + orig_frame) %>%
patchwork::wrap_plots()
# repeat with spatial_proc = FALSE
obj_list <- splitSpataObject(object_mouse, grouping = "tissue_section", spatial_proc = FALSE)
# present remaining spatial annotation ids
purrr::map(obj_list, .f = ~ getSpatAnnIds(.x))
# show surface plot with all remaining spatial annotations
purrr::map(obj_list, .f = ~ plotSurface(.x) + ggpLayerSpatAnnOutline(.x) + orig_frame) %>%
patchwork::wrap_plots()
# ----- Example 3: cropSpataObject()
# uses subsetSpataObject() in the background
object <- loadExampleObject("UKF275T", meta = TRUE)
orig_frame <- ggpLayerFrameByCoords(object)
xcrop <- c("2.5mm", "5.5mm")
ycrop <- c("5mm", "7mm")
plotSurface(object, color_by = "bayes_space") +
ggpLayerAxesSI(object) +
ggpLayerRect(object, xrange = xcrop, yrange = ycrop)
object_cropped <-
cropSpataObject(object, xrange = xcrop, yrange = ycrop)
plotSurface(object_cropped, color_by = "bayes_space", pt_size = 0.75) + orig_frame