-
-
Notifications
You must be signed in to change notification settings - Fork 14
Open
Labels
SeuratIssues related to Seurat object conversionIssues related to Seurat object conversion
Description
I leave here a snippet of code I have written to do so:
# Prepare the custom conversion
## Obs - Metadata
obs_mapping <- colnames(spatial_obj@meta.data)
names(obs_mapping) <- colnames(spatial_obj@meta.data)
print(length(obs_mapping))
print(paste0("Nrow metadata:", nrow(spatial_obj@meta.data)))
## var mapping - Seurat does not often compute var statistics like in sc.pp
## uns mapping - image identidities
### Image data
images = list(lowres=spatial_obj@images$tissue_lowres_image.png@image)
### Scale factors
scalefactors_seurat <- spatial_obj@images$tissue_lowres_image.png@scale.factors
scalefactors = list(fiducial_diameter_fullres=scalefactors_seurat$fiducial, spot_diameter_fullres=scalefactors_seurat$spot,
tissue_hires_scalef=scalefactors_seurat$hires, tissue_lowres_scalef=scalefactors_seurat$lowres)
### Metadata
metadata = list(chemistry_description = chemistry_description, software_version = software_version)
spatial_list <- list(list(images=images,metadata=metadata, scalefactors=scalefactors))
names(spatial_list) <- sample_name
spatial_obj@misc[["spatial"]] <-spatial_list
# Obsm mapping - Coordinates
obsm_spatial <- as.matrix(spatial_obj@images$tissue_lowres_image.png@boundaries$centroids@coords[,c("y","x")])
colnames(obsm_spatial) <- NULL
rownames(obsm_spatial) <- colnames(spatial_obj)
print(paste0("Obsm dim:", dim(obsm_spatial)))
## Add it to dim reduction
spatial_obj[["spatial_adata"]] <- CreateDimReducObject(embeddings = obsm_spatial, assay="Spatial",key="spatialadata_")
print(paste0("Count dim",dim(spatial_obj@assays$Spatial$counts)))
print(names(spatial_obj@assays$Spatial@layers))
print(paste0("Objet dim:",dim(spatial_obj)))
# Trying to use custom annotation
adata <- as_AnnData(
spatial_obj,
assay_name = "Spatial",#spatial assay
x_mapping = "counts",
layers_mapping = c(counts="counts"),
obs_mapping = obs_mapping,
var_mapping = TRUE,
obsm_mapping = list(X_pca = "pca", X_umap = "umap", spatial = "spatial_adata"),
obsp_mapping = TRUE,
uns_mapping = c("spatial")
)
print(paste0("Anndata dim ", dim(adata$X)))
However, I had an error when writing this object. But weirdly, the object was still written and seems functional in python environment as I was able to access .X and plot features & metadata.
> write_h5ad(adata,paste0(save_path, sample_name,".h5ad"), mode="a")
Error:
! Unexpected shape for X
ℹ Expected [36601], got [642, 36601]
> rlang::last_trace(drop = FALSE)
<error/rlang_error>
Error:
! Unexpected shape for X
ℹ Expected [36601], got [642, 36601]
---
Backtrace:
▆
1. ├─anndataR::write_h5ad(...)
2. │ └─object$as_HDF5AnnData(path, compression = compression, mode = mode)
3. │ └─anndataR:::as_HDF5AnnData(...)
4. │ └─HDF5AnnData$new(...)
5. │ └─anndataR (local) initialize(...)
6. └─anndataR (local) `<fn>`(base::quote(`<dgRMatrx[,36601]>`))
7. └─private$.validate_aligned_array(...)
8. └─cli::cli_abort(...)
9. └─rlang::abort(...)
Have you already experimented such issue? Do you see any way I could change my code?
Thanks a lot!
Best,
Lucie
Metadata
Metadata
Assignees
Labels
SeuratIssues related to Seurat object conversionIssues related to Seurat object conversion