Skip to contents

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. If NULL, no data will be copied to the X 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.

Value

An AnnData object

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 be NULL (empty). If you want to copy data to the X 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'