1. Converting to and from AnnData (squidpy-flavor)

This tutorial details how to use the conversion functions anndataToGiotto() and giottoToAnnData(). A mini Giotto object will be used for minimal computational requirements. Please note that these functions are inherently in active development, since changes to either squidpy or anndata are possible.

2. Start Giotto

# Ensure Giotto Suite is installed
if(!"Giotto" %in% installed.packages()) {
  pak::pkg_install("drieslab/Giotto")
}

library(Giotto)

# Ensure Giotto Data is installed
if(!"GiottoData" %in% installed.packages()) {
  pak::pkg_install("drieslab/GiottoData")
}

library(GiottoData)

# Ensure the Python environment for Giotto has been installed
genv_exists = checkGiottoEnvironment()
if(!genv_exists){
  # The following command need only be run once to install the Giotto environment
  installGiottoEnvironment()
}

3. Create a Giotto object

# Specify path to which results may be saved
results_directory = paste0(getwd(),'/giotto_anndata_conversion/') 

# Optional: Specify a path to a Python executable within a conda or miniconda 
# environment. If set to NULL (default), the Python executable within the previously
# installed Giotto environment will be used.
my_python_path = NULL # alternatively, "/local/python/path/python" if desired.

mini_gobject = loadGiottoMini(dataset = 'vizgen', 
                              python_path = my_python_path)

instrs = showGiottoInstructions(mini_gobject)
instrs$save_dir = results_directory

mini_gobject = replaceGiottoInstructions(gobject = mini_gobject,
                                         instructions = instrs)

4. Convert Giotto to AnnData

Since Giotto is structured hierarchally, converting Giotto to AnnData will result in multiple .h5ad files. Each file will correspond to a Giotto spat_unit feat_type pair. Furthermore, each expression slot will be treated as a layer in the resulting AnnData slot.

Squidpy anndata objects take different defaults for various operations compared to Giotto. For instance, the default nearest neighbor network is a kNN for squidpy, while the default for Giotto is a sNN. We’ll create a kNN in addition to the sNN within this object already to show how it they are handled.

mini_gobject = createNearestNetwork(gobject = mini_gobject,
                                    spat_unit = "aggregate",
                                    feat_type = "rna",
                                    type = "kNN",
                                    dim_reduction_to_use = "umap",
                                    dim_reduction_name = "umap",
                                    k = 15,
                                    name = "kNN.umap")

The above cell creates a nearest network with almost all default parameters. We’ll change some and make a new network to show how the converter handles this.

mini_gobject = createNearestNetwork(gobject = mini_gobject,
                                    spat_unit = "aggregate",
                                    feat_type = "rna",
                                    type = "kNN",
                                    dim_reduction_to_use = "umap",
                                    dim_reduction_name = "umap",
                                    k = 6,
                                    name = "new_network")

Since we have multiple spat_unit feat_type pairs, there will be multiple files created by this function. The names of the .h5ad files will be returned. In the case of a non-anndata-default nearest network or spatial network name, the key_added terms will be recorded and saved in .txt files named accordingly. Please see the documentation for further details.

anndata_conversions = giottoToAnnData(gobject = mini_gobject,
                                      save_directory = results_directory,
                                      python_path = my_python_path)

5. AnnData to Giotto

To convert an AnnData Object back into a Giotto object, it must first be saved as a .h5ad file. The name of said file may then be provided to anndataToGiotto() for conversion.

If a nearest neighbor network or spatial netowkr was created using the key_added argument, they may be provided to arguments n_key_added and/or spatial_n_key_added, respectively. If converting an anndata object that was originally a giotto object, the .txt files generated by giottoToAnnData() may be provided to these arguments as well.

z0_rna_gobject <- anndataToGiotto(anndata_path = "./giotto_anndata_conversion/z0_rna_converted_gobject.h5ad",
                                  python_path = my_python_path)

z1_rna_gobject <- anndataToGiotto(anndata_path = "./giotto_anndata_conversion/z1_rna_converted_gobject.h5ad",
                                  python_path = my_python_path)

aggregate_rna_gobject <- anndataToGiotto(anndata_path = "./giotto_anndata_conversion/aggregate_rna_converted_gobject.h5ad",
                                         python_path = my_python_path,
                                         n_key_added = list("sNN.pca","new_network"),
                                         spatial_n_key_added = "aggregate_rna_spatial_network_keys_added.txt")

6. Session Info

    R version 4.2.2 (2022-10-31 ucrt)
    Platform: x86_64-w64-mingw32/x64 (64-bit)
    Running under: Windows 10 x64 (build 22621)

    Matrix products: default

    locale:
    [1] LC_COLLATE=English_United States.utf8 
    [2] LC_CTYPE=English_United States.utf8   
    [3] LC_MONETARY=English_United States.utf8
    [4] LC_NUMERIC=C                          
    [5] LC_TIME=English_United States.utf8    

    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base     

    other attached packages:
    [1] GiottoData_0.2.1 Giotto_3.2.1    

    loaded via a namespace (and not attached):
     [1] Rcpp_1.0.10       pillar_1.9.0      compiler_4.2.2    tools_4.2.2      
     [5] digest_0.6.30     jsonlite_1.8.3    evaluate_0.20     lifecycle_1.0.3  
     [9] tibble_3.2.1      gtable_0.3.3      lattice_0.20-45   png_0.1-7        
    [13] pkgconfig_2.0.3   rlang_1.1.0       igraph_1.4.1      Matrix_1.5-1     
    [17] cli_3.4.1         rstudioapi_0.14   parallel_4.2.2    yaml_2.3.7       
    [21] xfun_0.38         fastmap_1.1.0     terra_1.7-18      dplyr_1.1.1      
    [25] knitr_1.42        rappdirs_0.3.3    generics_0.1.3    vctrs_0.6.1      
    [29] rprojroot_2.0.3   grid_4.2.2        tidyselect_1.2.0  here_1.0.1       
    [33] reticulate_1.26   glue_1.6.2        data.table_1.14.6 R6_2.5.1         
    [37] fansi_1.0.4       rmarkdown_2.21    ggplot2_3.4.1     magrittr_2.0.3   
    [41] scales_1.2.1      codetools_0.2-18  htmltools_0.5.4   colorspace_2.1-0 
    [45] utf8_1.2.3        munsell_0.5.0     dbscan_1.1-11