Open smk5g5 opened 8 months ago
After my testing, you might need to store the original expression matrix in .raw. —> adata.raw = adata.
Thank you that fixed it but now I am getting a new error when I am trying to save anndata object using adata.write
.
Here is the error.
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/h5d.pyx", line 282, in h5py.h5d.DatasetID.write
File "h5py/_proxy.pyx", line 147, in h5py._proxy.dset_rw
File "h5py/_conv.pyx", line 442, in h5py._conv.str2vlen
File "h5py/_conv.pyx", line 96, in h5py._conv.generic_converter
File "h5py/_conv.pyx", line 247, in h5py._conv.conv_str2vlen
TypeError: Can't implicitly convert non-string objects to strings
Error raised while writing key 'Ligand1' of <class 'h5py._hl.group.Group'> to /
Can you please comment on why is that and how to circumvent it?
It may be an issue with the current version of Anndata, and I have encountered a similar problem before. I tried to individually save some items stored in the .uns attribute to bypass this bug. For example:
adata.uns['local_z_p'].to_csv(savedir+'sdm_test_local_z_p.csv')
adata.uns['selected_spots'].to_csv(savedir+'sdm_test_selected_spots.csv')
del adata.uns['local_z_p']
del adata.uns['selected_spots']
# Use sdm for storage
sdm.write_spatialdm_h5ad(adata, filename=savedir+'save_sdm__test_.h5ad')
Additionally, it is also possible that some values stored in the .obs attribute are null, leading to this issue.
adata.obs['item'] = adata.obs['item'] .astype(str)
You might want to give it a try, and in the end, using either write_spatialdm_h5ad or write_h5ad should yield the same result.
Do I have to remove all the adata.uns objects. I have not looked at your code in detail but a cursory glance indicates that following uns data might have to be removed before saving the adata object.
adata.uns['global_res'],
adata.uns['global_I'],
adata.uns['global_stat'],
adata.uns['global_res']
adata.uns['local_stat']
adata.uns['local_z']
adata.uns['local_z_p']
adata.uns['local_perm_p']
Let me know if I am missing something. For many of them to_csv
might not work. I tried to pickle.dump(adata_out.uns['local_stat']
some objects but even that is throwing error. I would ideally like to be able to comeback and look at the above things and need to save them to do so. I was wondering if anything else in the uns also needs to be deleted that I am missing?
Also, which version of anndata/scanpy did you test/publish your code (where you did not get any errors while saving anndata object)?
Because I am getting a lot of errors with mine while trying to save the anndata.
My anndata version is : 0.10.3 My scanpy version is : 1.9.6 My spatialdm version : 0.1.0
Have you checked for 'null' values in your 'obs', 'obsm', and 'uns'? It seems that there are some null values in the DataFrame. Personally, I have encountered an issue where 'adata.uns['local_z_p']' and 'adata.uns['selected_spots']' cannot be saved using 'adata.write_h5ad', so I saved them using 'to_csv'.
My anndata version is : 0.8.0 My scanpy version is : 1.9.6 My spatialdm version : 0.1.0
I understand why some of unstructured data may not work when writing anndata file. What I don't understand is why I would run into errors when doing pickle dump of that unstructured data. e.g. When i try to do the following :
filehandler = open(b"test_sdm_allunsdata.pkl","wb")
pickle.dump({'global_res':adata.uns['global_res'], 'global_I':adata.uns['global_I'],'global_stat':adata.uns['global_stat'],'global_res':adata.uns['global_res'],'local_stat':adata.uns['local_stat'],
'local_z':adata.uns['local_z'],'local_z_p':adata.uns['local_z_p'],'local_perm_p':adata.uns['local_perm_p']},filehandler)
I still get error saving picke file.
Hi,
I followed the spatial dm example but I keep getting errors when running spatialdm_local. Below is the code I am running.
And here is the error I am getting.