from_Seurat()
converts a Seurat object to an AnnData object.
Only one assay can be converted at a time. Arguments are used to configure the conversion.
If NULL
, the functions from_Seurat_guess_*
will be used to guess the mapping.
Usage
from_Seurat(
seurat_obj,
output_class = c("InMemoryAnnData", "HDF5AnnData"),
assay_name = NULL,
x_mapping = NULL,
layers_mapping = NULL,
obsm_mapping = NULL,
varm_mapping = NULL,
obsp_mapping = NULL,
varp_mapping = NULL,
uns_mapping = NULL,
...
)
Arguments
- seurat_obj
A Seurat object to be converted.
- output_class
Name of the AnnData class. Must be one of
"HDF5AnnData"
or"InMemoryAnnData"
.- assay_name
The name of the assay to be converted. If
NULL
, the default assay will be used (SeuratObject::DefaultAssay()
).- x_mapping
A mapping of a Seurat layer to the AnnData
X
slot. IfNULL
, no data will be copied to theX
slot.- layers_mapping
A named list mapping layer names to the names of the layers in the Seurat object. Each item in the list must be a character vector of length 1. See section "
$layers
mapping" for more details.- obsm_mapping
A named list mapping reductions to the names of the reductions in the Seurat object. Each item in the list must be a vector of length 2. See section "
$obsm
mapping" for more details.- varm_mapping
A named list mapping PCA loadings to the names of the PCA loadings in the Seurat object. Each item in the list must be a character vector of length 1. See section "
$varm
mapping" for more details.- obsp_mapping
A named list mapping graph names to the names of the graphs in the Seurat object. Each item in the list must be a character vector of length 1. See section "
$obsp
mapping" for more details.- varp_mapping
A named list mapping miscellaneous data to the names of the data in the Seurat object. Each item in the list must be a named list with one or two elements. See section "
$varp
mapping" for more details.- uns_mapping
A named list mapping miscellaneous data to the names of the data in the Seurat object. Each item in the list must be a named list with one or two elements. See section "
$uns
mapping" for more details.- ...
Additional arguments passed to the generator function.
Details
For more information on the functionality of an AnnData object, see anndataR-package.
$X
mapping
A mapping of a Seurat layer to the AnnData X
slot. Its value must be NULL
or a character vector of the Seurat
layer name to copy. If NULL
, no data will be copied to the X
slot.
$layers
mapping
A named list to map AnnData layers to Seurat layers. Each item in the list must be a character vector of length 1.
The $X
key maps to the X
slot.
Example: layers_mapping = list(counts = "counts", foo = "bar")
.
If NULL
, the internal function from_Seurat_guess_layers
will be used to guess the layer mapping as follows:
All Seurat layers are copied to AnnData
layers
by name.This means that the AnnData
X
slot will beNULL
(empty). If you want to copy data to theX
slot, you must define the layer mapping explicitly.
$obsm
mapping
A named list to map Seurat reductions to AnnData $obsm
.
Each item in the list must be a vector of length 2,
where the name corresponds to the name of the resulting $obsm
slot, and the values correspond to the
the location of the data in the Seurat object.
Example: obsm_mapping = list(pca = c("reductions", "pca"), umap = c("reductions", "umap"))
.
If NULL
, the internal function from_Seurat_guess_obsms
will be used to guess the obsm mapping as follows:
All Seurat reductions are prefixed with
X_
and copied to AnnData$obsm
.
$varm
mapping
A named list to map Seurat reduction loadings to AnnData $varm
.
Each item in the list must be a character vector of length 2, where the name corresponds to the name of the
resulting $varm
slot, and the value corresponds to the location of the data in the Seurat object.
Example: varm_mapping = list(PCs = c("reductions", "pca")
.
If NULL
, the internal function from_Seurat_guess_varms
will be used to guess the varm mapping as follows:
The name of the PCA loadings is copied by name.
$obsp
mapping
A named list to map Seurat graphs to AnnData $obsp
.
Example: obsp_mapping = list(nn = "connectivities")
.
If NULL
, the internal function from_Seurat_guess_obsps
will be used to guess the obsp mapping as follows:
All Seurat graphs are copied to
$obsp
by name.
$varp
mapping
A named list to map Seurat miscellaneous data to AnnData $varp
. The name of each item corresponds to the
resulting $varp
slot, while the value of each item must be a fector which corresponds to the location of the data
in the Seurat object.
Example: varp_mapping = list(foo = c("misc", "foo"))
.
If NULL
, the internal function from_Seurat_guess_varps
will be used to guess the varp mapping as follows:
No data is mapped to
$varp
.
$uns
mapping
A named list to map Seurat miscellaneous data to AnnData uns
. Each item in the list must be a character of
length 2. The first element must be "misc"
. The second element is the name of the data in the corresponding slot.
Example: uns_mapping = list(foo = c("misc", "foo"))
.
If NULL
, the internal function from_Seurat_guess_uns
will be used to guess the uns mapping as follows:
All Seurat miscellaneous data is copied to
uns
by name.
Examples
library(Seurat)
#> Loading required package: SeuratObject
#> Loading required package: sp
#> ‘SeuratObject’ was built under R 4.4.0 but the current version is
#> 4.4.2; it is recomended that you reinstall ‘SeuratObject’ as the ABI
#> for R may have changed
#>
#> Attaching package: ‘SeuratObject’
#> The following objects are masked from ‘package:base’:
#>
#> intersect, t
counts <- matrix(rbinom(20000, 1000, .001), nrow = 100)
obj <- CreateSeuratObject(counts = counts)
#> Warning: Data is of class matrix. Coercing to dgCMatrix.
obj <- NormalizeData(obj)
#> Normalizing layer: counts
obj <- FindVariableFeatures(obj)
#> Finding variable features for layer counts
obj <- ScaleData(obj)
#> Centering and scaling data matrix
obj <- RunPCA(obj, npcs = 10L)
#> PC_ 1
#> Positive: Feature72, Feature61, Feature35, Feature78, Feature52, Feature50, Feature66, Feature8, Feature14, Feature32
#> Feature70, Feature1, Feature56, Feature87, Feature19, Feature97, Feature7, Feature17, Feature86, Feature48
#> Feature81, Feature88, Feature43, Feature67, Feature36, Feature3, Feature26, Feature54, Feature40, Feature33
#> Negative: Feature9, Feature29, Feature4, Feature39, Feature15, Feature27, Feature34, Feature68, Feature62, Feature18
#> Feature22, Feature46, Feature10, Feature74, Feature49, Feature37, Feature12, Feature23, Feature95, Feature100
#> Feature64, Feature30, Feature90, Feature55, Feature47, Feature96, Feature5, Feature31, Feature60, Feature92
#> PC_ 2
#> Positive: Feature41, Feature89, Feature45, Feature98, Feature33, Feature44, Feature68, Feature91, Feature18, Feature59
#> Feature61, Feature86, Feature32, Feature4, Feature51, Feature42, Feature54, Feature67, Feature56, Feature21
#> Feature53, Feature70, Feature8, Feature31, Feature22, Feature14, Feature12, Feature76, Feature62, Feature58
#> Negative: Feature97, Feature13, Feature48, Feature69, Feature49, Feature82, Feature7, Feature5, Feature79, Feature93
#> Feature94, Feature84, Feature23, Feature78, Feature27, Feature40, Feature26, Feature50, Feature81, Feature46
#> Feature29, Feature10, Feature71, Feature72, Feature52, Feature88, Feature87, Feature9, Feature95, Feature16
#> PC_ 3
#> Positive: Feature3, Feature93, Feature2, Feature5, Feature11, Feature79, Feature66, Feature74, Feature50, Feature36
#> Feature78, Feature12, Feature45, Feature98, Feature51, Feature16, Feature83, Feature28, Feature27, Feature9
#> Feature8, Feature95, Feature33, Feature63, Feature21, Feature87, Feature40, Feature53, Feature85, Feature57
#> Negative: Feature58, Feature90, Feature46, Feature81, Feature44, Feature56, Feature69, Feature86, Feature37, Feature97
#> Feature92, Feature26, Feature88, Feature30, Feature96, Feature42, Feature14, Feature25, Feature71, Feature34
#> Feature70, Feature82, Feature23, Feature35, Feature13, Feature19, Feature80, Feature4, Feature29, Feature67
#> PC_ 4
#> Positive: Feature96, Feature11, Feature78, Feature59, Feature31, Feature57, Feature19, Feature80, Feature41, Feature4
#> Feature55, Feature44, Feature60, Feature90, Feature32, Feature50, Feature1, Feature14, Feature9, Feature77
#> Feature85, Feature28, Feature82, Feature99, Feature25, Feature8, Feature27, Feature62, Feature64, Feature29
#> Negative: Feature20, Feature18, Feature81, Feature100, Feature93, Feature10, Feature15, Feature74, Feature83, Feature33
#> Feature58, Feature6, Feature72, Feature89, Feature7, Feature35, Feature53, Feature37, Feature42, Feature43
#> Feature76, Feature46, Feature98, Feature73, Feature52, Feature88, Feature63, Feature49, Feature17, Feature22
#> PC_ 5
#> Positive: Feature77, Feature40, Feature9, Feature21, Feature38, Feature65, Feature80, Feature22, Feature72, Feature18
#> Feature50, Feature71, Feature1, Feature83, Feature82, Feature53, Feature67, Feature63, Feature90, Feature13
#> Feature4, Feature61, Feature56, Feature84, Feature43, Feature54, Feature19, Feature94, Feature37, Feature33
#> Negative: Feature30, Feature51, Feature86, Feature69, Feature45, Feature14, Feature3, Feature26, Feature57, Feature23
#> Feature99, Feature60, Feature66, Feature36, Feature15, Feature68, Feature85, Feature29, Feature78, Feature24
#> Feature16, Feature70, Feature42, Feature41, Feature48, Feature79, Feature10, Feature2, Feature49, Feature97
obj <- FindNeighbors(obj)
#> Computing nearest neighbor graph
#> Computing SNN
obj <- RunUMAP(obj, dims = 1:10)
#> Warning: The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
#> To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
#> This message will be shown once per session
#> 10:09:28 UMAP embedding parameters a = 0.9922 b = 1.112
#> 10:09:28 Read 200 rows and found 10 numeric columns
#> 10:09:28 Using Annoy for neighbor search, n_neighbors = 30
#> 10:09:28 Building Annoy index with metric = cosine, n_trees = 50
#> 0% 10 20 30 40 50 60 70 80 90 100%
#> [----|----|----|----|----|----|----|----|----|----|
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> *
#> |
#> 10:09:28 Writing NN index file to temp file /tmp/RtmpePOFm4/file17c22df9ca6b
#> 10:09:28 Searching Annoy index using 1 thread, search_k = 3000
#> 10:09:28 Annoy recall = 100%
#> 10:09:28 Commencing smooth kNN distance calibration using 1 thread
#> with target n_neighbors = 30
#> 10:09:29 Initializing from normalized Laplacian + noise (using RSpectra)
#> 10:09:29 Commencing optimization for 500 epochs, with 6160 positive edges
#> 10:09:29 Optimization finished
from_Seurat(obj)
#> AnnData object with n_obs × n_vars = 200 × 100
#> obs: 'orig.ident', 'nCount_RNA', 'nFeature_RNA'
#> var: 'vf_vst_counts_mean', 'vf_vst_counts_variance', 'vf_vst_counts_variance.expected', 'vf_vst_counts_variance.standardized', 'vf_vst_counts_variable', 'vf_vst_counts_rank', 'var.features', 'var.features.rank'
#> obsm: 'X_pca', 'X_umap'
#> varm: 'PCs'
#> layers: 'counts', 'data', 'scale.data'
#> obsp: 'connectivities', 'snn'