Create a SpatialFeatureExperiment object.
Usage
SpatialFeatureExperiment(
assays,
colData = DataFrame(),
rowData = NULL,
sample_id = "sample01",
spatialCoordsNames = c("x", "y"),
spatialCoords = NULL,
colGeometries = NULL,
rowGeometries = NULL,
annotGeometries = NULL,
spotDiameter = NA_real_,
annotGeometryType = "POLYGON",
spatialGraphs = NULL,
unit = c("full_res_image_pixel", "micron"),
...
)Arguments
- assays
A
listorSimpleListof matrix-like elements, or a matrix-like object (e.g. an ordinary matrix, a data frame, a DataFrame object from the S4Vectors package, a sparseMatrix derivative from the Matrix package, a DelayedMatrix object from the DelayedArray package, etc...). All elements of the list must have the same dimensions, and dimension names (if present) must be consistent across elements and with the row names ofrowRangesandcolData.- colData
An optional DataFrame describing the samples. Row names, if present, become the column names of the RangedSummarizedExperiment.
- rowData
A DataFrame object describing the rows. Row names, if present, become the row names of the SummarizedExperiment object. The number of rows of the DataFrame must equal the number of rows of the matrices in
assays.- sample_id
A
charactersample identifier, which matches thesample_idinimgData. Thesample_idwill also be stored in a new column incolData, if not already present. Default =sample01.- spatialCoordsNames
A
charactervector of column names if*Geometriesarguments have ordinary data frames, to identify the columns in the ordinary data frames that specify the spatial coordinates. IfcolGeometriesis not specified, then this argument will behave as inSpatialExperiment, butcolGeometrieswill be given precedence if provided.- spatialCoords
A numeric matrix containing columns of spatial coordinates, as in
SpatialExperiment. The coordinates are centroids of the entities represented by the columns of the gene count matrix. IfcolGeometriesis also specified, then it will be given priority and a warning is issued. Otherwise, thesfrepresentation of the centroids will be stored in thecolGeometrycalledcentroids.- colGeometries
Geometry of the entities that correspond to the columns of the gene count matrix, such as cells and Visium spots. It must be a named list of one of the following:
- An
sfdata frame The geometry column specifies the geometry of the entities.
- An ordinary data frame specifying centroids
Column names for the coordinates are specified in the
spatialCoordsNamesargument. For Visium and ST, in addition to the centroid coordinate data frame, the spot diameter in the same unit as the coordinates can be specified in thespotDiamterargument.- An ordinary data frame specifying polygons
Also use
spatialCoordsNames. There should an additional column "ID" to specify which vertices belong to which polygon. The coordinates should not be in list columns. Rather, the data frame should look like it is passed toggplot2::geom_polygon. If there are holes, then there must also be a column "subID" that differentiates between the outer polygon and the holes.
In all cases, the data frame should specify the same number of geometries as the number of columns in the gene count matrix. If the column "barcode" is present, then it will be matched to column names of the gene count matrix. Otherwise, the geometries are assumed to be in the same order as columns in the gene count matrix. If the geometries are specified in an ordinary data frame, then it will be converted into
sfinternally. Named list of data frames because each entity can have multiple geometries, such as whole cell and nuclei segmentations. The geometries are assumed to be POINTs for centroids and POLYGONs for segmentations. If polygons are specified in an ordinary data frame, then anything with fewer than 3 vertices will be removed. For anything other than POINTs, attributes of the geometry will be ignored.- An
- rowGeometries
Geometry associated with genes or features, which correspond to rows of the gene count matrix.
- annotGeometries
Geometry of entities that do not correspond to columns or rows of the gene count matrix, such as tissue boundary and pathologist annotations of histological regions, and nuclei segmentation in a Visium dataset. Also a named list as in
colGeometries. The ordinary data frame may specify POINTs, POLYGONs, or LINESTRINGs, or their MULTI versions. Each data frame can only specify one type of geometry. For MULTI versions, there must be a column "group" to identify each MULTI geometry.- spotDiameter
Spot diameter for technologies with arrays of spots of fixed diameter per slide, such as Visium, ST, DBiT-seq, and slide-seq. The diameter must be in the same unit as the coordinates in the *Geometry arguments. Ignored for geometries that are not POINT or MULTIPOINT.
- annotGeometryType
Character vector specifying geometry type of each element of the list if
annotGeometryis specified. Each element of the vector must be one of POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, and MULTIPOLYGON. Must be either length 1 (same for all elements of the list) or the same length as the list. Ignored if the corresponding element is ansfobject.- spatialGraphs
A named list of
listwobjects (seespdep) for spatial neighborhood graphs.- unit
Unit the coordinates are in, either microns or pixels in full resolution image.
- ...
Additional arguments passed to the
SpatialExperimentandSingleCellExperimentconstructors.
Value
A SFE object. If neither colGeometries nor spotDiameter
is specified, then a colGeometry called "centroids" will be made,
which is essentially the spatial coordinates as sf POINTs. If
spotDiameter is specified, but not colGeometries, then the
spatial coordinates will be buffered by half the diameter to get spots with
the desired diameter, and the resulting colGeometry will be called
"spotPoly", for which there's a convenience getter and setter,
spotPoly.
Examples
library(Matrix)
#>
#> Attaching package: ‘Matrix’
#> The following object is masked from ‘package:S4Vectors’:
#>
#> expand
data("visium_row_col")
coords1 <- visium_row_col[visium_row_col$col < 6 & visium_row_col$row < 6, ]
coords1$row <- coords1$row * sqrt(3)
cg <- df2sf(coords1[, c("col", "row")], c("col", "row"), spotDiameter = 0.7)
set.seed(29)
col_inds <- sample(seq_len(13), 13)
row_inds <- sample(seq_len(5), 13, replace = TRUE)
values <- sample(seq_len(5), 13, replace = TRUE)
mat <- sparseMatrix(i = row_inds, j = col_inds, x = values)
colnames(mat) <- coords1$barcode
rownames(mat) <- sample(LETTERS, 5)
rownames(cg) <- colnames(mat)
sfe <- SpatialFeatureExperiment(list(counts = mat),
colData = coords1,
spatialCoordsNames = c("col", "row"),
spotDiameter = 0.7
)
sfe2 <- SpatialFeatureExperiment(list(counts = mat),
colGeometries = list(foo = cg)
)