Skip to content

Error when converting spatial data #338

@lazappi

Description

@lazappi

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

No one assigned

    Labels

    SeuratIssues related to Seurat object conversion

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions