Creates a subset of the SPATA2 object by using a list of barcodes and/or molecules. This function is the working horse behind all functions that manipulate the number of observations and molecules in the object.

subsetSpataObject(
  object,
  barcodes = NULL,
  molecules = NULL,
  spatial_proc = TRUE,
  opt = "keep",
  verbose = NULL
)

Arguments

object

An object of class SPATA2 or, in case of S4 generics, objects of classes for which a method has been defined.

barcodes

Character vector or NULL. Names the observations of interest.

molecules

Character vector or NULL. Names the molecules of interest.

spatial_proc

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.

opt

Character value. Decides how the input for barcodes and molecules is handled.

  • 'keep': The specified barcodes and/or molecules are kept (default).

  • 'remove': The specified barcodes and/or molecules are removed.

verbose

Logical. If TRUE, informative messages regarding the computational progress will be printed.

(Warning messages will always be printed.)

Value

The updated input object, containing the added, removed or computed results.

Details

After removal of observations, unused levels of factor variables in the feature data.frame are dropped. Analysis results are not affected.

Examples

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