Skip to contents

# Introduction to the condor object and other utilities

Source: `vignettes/Other_utilities.Rmd`
`Other_utilities.Rmd`

    library(cyCONDOR)

In this vignette we introduce the structure of the condor object and showcase some useful `cyCONDOR` functions to interact with it.

## Load an example dataset

    condor <- readRDS("../.test_files/condor_example_016_misc.rds")

## Structure of the `condor` object

Knowing the structure of one’s data object is a huge advantage to maximize the ease of using bioinformatic tools for analysis. Due to it’s straight-line composition, the structure of the `condor` object is easy to grasp. It follows an hierarchical structure with 3 levels (data type/method -> data slot -> variable) and can be separated into 5 major sections each representing one step of data acquiring or analysis (expression, cell metadata, dimensionality reduction, clustering and extras).

Graphic of the condor object structure. The hierarchical levels are depicted as columns and the the major sections are colored in.

### Hierarchical structure

The 1st level describes the data types and methods present in the object followed by the 2nd level specifying separate data slots for the actual data stored as data frames (df). The 3rd level contains the variables (column names) of the respective df.

### Overview of the 5 sections of a `condor` object

The data types `$expr` and `$anno` are created while data loading and transformation of the `condor` object is performed and serve as the basis for further data analysis.

#### Expression

The original, transformed expression values are saved in `$expr` under the data slot `$orig`, containing the cell markers as column names (variables) and unique cell IDs as row names. If Batch normalization is performed on the expression values the output is saved in a df under a new data slot (`$norm`).

#### Metadata

The metadata is saved under data type `anno` and data slot `cell_anno`. The variables of this df correspond to the provided cell annotation and can be used as the argument `group_var` in many visualization functions.

#### Dimensionality reductions

Each output of a dimensionalty reduction or clustering function will be saved as a df under their specified method (e.g. `$pca`, `$umap`, `$clustering`) and data slot (e.g. `$orig`, `$pca_orig`, `$phenograph_pca_orig_k30`). The variables of the dimensionality reductions (e.g. `$PC1`, `$PC2`) will be used by `cyCondor` automatically as coordinates for visualization embedding when the method and data slot are specified (arg: `reduction_method` and `reduction_slot`).

#### Clustering

After clustering a data slot will be created under the `$clustering` method, named with a combination of the relevant parameters used for the calculations (eg. `phenograph_pca_orig_k30`). The available variables (e.g. `$Phenograph` ) are used as a basis for cell labeling, later saved under the variable (`metaclusters`).

#### Extras

`$extra` contains all additional data to be stored (e.g. parameters of data loading, lists of markers, dimensionality reduction or clustering models for future data projection).

## Visualize the content of a condor object

    condor_info(fcd = condor)

    ## condor object with: 59049 cells 28 parameters across 6 samples
    ##
    ## Available Data Slots:
    ##
    ## orig
    ##
    ## Available Dimensionality Reductions:
    ##
    ## pca: orig
    ## pca: scatter_exclusion_orig
    ## umap: pca_orig
    ## tSNE: pca_orig
    ##
    ## Available Clustering:
    ##
    ## FlowSOM_pca_orig_k_15
    ## phenograph_pca_orig_k_60

## Extract or change marker names

### Get measured markers

The function `measured_markers` takes the condor object as `fcd` input and returns the number of markers that are included in the condor object and a list of their names. By directing the output to a variable it is possible to save the list of the marker names for future use.

    expr_markers <- measured_markers(fcd = condor)

    ## [1] "number of measured markers: 28"
    ##  [1] "FSC-A"         "SSC-A"         "CD38"          "CD8"
    ##  [5] "CD195 (CCR5)"  "CD94 (KLRD1)"  "CD45RA"        "HLA-DR"
    ##  [9] "CD56"          "CD127 (IL7RA)" "CD14"          "CD64"
    ## [13] "CD4"           "IgD"           "CD19"          "CD16"
    ## [17] "CD32"          "CD197 (CCR7)"  "CD20"          "CD27"
    ## [21] "CD15"          "PD-1"          "CD3"           "CD57"
    ## [25] "CD25"          "CD123 (IL3RA)" "CD13"          "CD11c"

### Change parameter names

The function `change_param_name` allows for the quick and easy changing of single or multiple parameter names. It needs the condor object as `fcd` input and vectors for the old and new parameter names (`old_names` and `new_names`, respectively). In the first example we change only the name of the PD-1 marker to PD1.

    condor <- change_param_name(fcd = condor,
                                old_names = "PD-1",
                                new_names = "PD1")

    ## [1] "Changed parameter 'PD-1' to 'PD1' in orig."

It is also possible to modify multiple names at the same time. The vector NewNames can either be written manually or computed using vector manipulations. In the second example below we exclude the protein names from the specific markers. It is important, that the order of the old and new marker names stay the same.

    OldNames <- c("CD195 (CCR5)", "CD94 (KLRD1)", "CD127 (IL7RA)", "CD197 (CCR7)", "CD123 (IL3RA)")
    NewNames <- unlist(strsplit(OldNames, " "))[2*(1:length(OldNames))-1]

    condor <- change_param_name(fcd = condor,
                                old_names = OldNames,
                                new_names = NewNames)

    ## [1] "Changed parameter 'CD195 (CCR5)' to 'CD195' in orig."
    ## [1] "Changed parameter 'CD94 (KLRD1)' to 'CD94' in orig."
    ## [1] "Changed parameter 'CD127 (IL7RA)' to 'CD127' in orig."
    ## [1] "Changed parameter 'CD197 (CCR7)' to 'CD197' in orig."
    ## [1] "Changed parameter 'CD123 (IL3RA)' to 'CD123' in orig."

### Get used markers

To keep track on which markers have been used as basis for dimensionality reduction or clustering the respective markers are being saved in the extra slot of the `condor` object. The `used_markers` function can be used to extract those markers.

It takes as input

- the `fcd` object (e.g. condor),
- the `input_type` (pca, umap, tSNE, diffmap, phenograph or FlowSOM),
- the `data_slot` (orig or norm),
- the `prefix` (if specified before, see dimensionality reduction or clustering)

and returns, similar to the `measured_markers` function, the number and names of the markers used for the specific analysis step.

    pca_orig_markers <- used_markers(fcd = condor,
                                     input_type = "pca",
                                     data_slot = "orig",
                                     prefix = NULL)

    ## [1] "number of used markers in pca_orig : 28"
    ##  [1] "FSC-A"  "SSC-A"  "CD38"   "CD8"    "CD195"  "CD94"   "CD45RA" "HLA-DR"
    ##  [9] "CD56"   "CD127"  "CD14"   "CD64"   "CD4"    "IgD"    "CD19"   "CD16"
    ## [17] "CD32"   "CD197"  "CD20"   "CD27"   "CD15"   "PD1"    "CD3"    "CD57"
    ## [25] "CD25"   "CD123"  "CD13"   "CD11c"

Below we show an example of markers used for the PCA calculation with an exclusion of the scatter markers `FSC-A` and `SSC-A`. The `prefix` used in this PCA calculation was defines as scatter_exclusion.

    pca_scatter_exclusion_orig_markers <- used_markers(fcd = condor,
                                     input_type = "pca",
                                     data_slot = "orig",
                                     prefix = "scatter_exclusion")

    ## [1] "number of used markers in pca_scatter_exclusion_orig : 26"
    ##  [1] "CD38"   "CD8"    "CD195"  "CD94"   "CD45RA" "HLA-DR" "CD56"   "CD127"
    ##  [9] "CD14"   "CD64"   "CD4"    "IgD"    "CD19"   "CD16"   "CD32"   "CD197"
    ## [17] "CD20"   "CD27"   "CD15"   "PD1"    "CD3"    "CD57"   "CD25"   "CD123"
    ## [25] "CD13"   "CD11c"

## Check the integrity of the `condor` object

The `check_IDs` function can be useful to make sure the condor object has the right structure for all downstream analysis. It checks the cell IDs at each level and compares them to the `fcd$expr$orig` data frame. If a discrepancy appears at any point, a warning will be returned.

    check_IDs(condor)

    ## [1] "Everything looks fine"

## Merge or subset the `condor` object

### Merge two `condor` objects

The `merge_condor` function combines two `condor` objects comprised of the same parameters (markers). This function will merge only expression table and annotation as all the downstream analysis will need to be repeated. If the cell IDs are doubled between the two objects the merging can not be facilitated.

    condor_merged <- merge_condor(data1 = condor,
                                  data2 = condor)

### Subset a `condor` object

The `subset_fcd` function subsets the `condor` object to a specific number of randomly selected cells specified with the `size` parameter. A seed can be set for reproducibility.

    condor_subset <- subset_fcd(fcd = condor,
                                size = 5000,
                                seed = 91)

### Subset a `condor` object equally for a variable

The `subset_fcd_byparam` function subsets the `condor` object to a specific number of randomly selected cells specified with the `size` parameter in each of the specified `param`. A seed can be set for reproducibility.

    condor_subset_sample <- subset_fcd_byparam(fcd = condor,
                                               param = "sample_ID",
                                               size = 500,
                                               seed = 91)

### Filter a `condor` object to create a specific subset

The `filter_fcd` function can be useful to created a specific subset of a `condor` object. It takes the row names of the cells to be filtered as `cell_ids` input.

    condor_filter <- filter_fcd(fcd = condor,
                                cell_ids = rownames(condor$expr$orig)[condor$clustering$phenograph_pca_orig_k_60$metaclusters == "Classical Monocytes"])

### Subsample the condor object with Geometric Sketching

The `subsample_geosketch` function can be useful if you want to speed up calculations of large datasets, without loosing information. It subsamples in a way, which preserves the topology of the PCA of a `condor` object, therefore reducing the number of data points, without skewing cell densities. You can provide the number of cells you want to subset or the fraction of cells you want to subset for.

    condor_sub <- subsample_geosketch(condor,pca_slot = "orig",n_sub=10000)

### Compare cyCONDOR frequencies with FlowJo results

We provide an easy to use function to calculate the correlation between cyCONDOR results and the cell frequency obtained with other analysis tools such as FlowJo.

The two dataframe should look like this, it is impartant that every colum name is starting with `Condor_` for the condor dataframe and `FlowJo` for the FlowJo dataframe.

    df_condor

    ##    sample_ID Condor_B_class_switched Condor_CD4_CM Condor_CD8_CM
    ## 1   Sample_1                 0.17143       0.34286       0.33571
    ## 2   Sample_2                 0.13125       0.29375       0.33125
    ## 3   Sample_3                 0.11333       0.26667       0.36667
    ## 4   Sample_4                 0.16250       0.38750       0.36250
    ## 5   Sample_5                 0.31429       0.41429       0.37143
    ## 6   Sample_6                 0.20000       0.30000       0.40000
    ## 7   Sample_7                 0.28182       0.29091       0.39091
    ## 8   Sample_8                 0.21111       0.42222       0.63333
    ## 9   Sample_9                 0.20000       0.30000       0.40000
    ## 10 Sample_10                 0.25126       0.33445       0.41765
    ##    Condor_CD69_pos Condor_Naive_CD4 Condor_Naive_CD8 Condor_Treg Condor_DCs
    ## 1          0.50714          0.51429          0.21429     0.22143    0.52857
    ## 2          0.52500          0.36250          0.26250     0.26250    0.53125
    ## 3          0.46667          0.36667          0.26667     0.33333    0.56667
    ## 4          0.52500          0.55000          0.45000     0.26250    0.62500
    ## 5          0.47143          0.37143          0.23571     0.23571    0.53571
    ## 6          0.50000          0.40000          0.30000     0.30000    0.60000
    ## 7          0.49091          0.39091          0.24545     0.24545    0.54545
    ## 8          0.51111          0.41111          0.31111     0.25556    0.55556
    ## 9          0.50000          0.40000          0.30000     0.30000    0.60000
    ## 10         0.50084          0.38403          0.26723     0.25042    0.53361
    ##    Condor_NK_CD56dim Condor_Unconventional_T
    ## 1            0.94286                 0.43571
    ## 2            0.96250                 0.83750
    ## 3            0.96667                 0.85333
    ## 4            0.96250                 0.46250
    ## 5            0.91786                 0.70357
    ## 6            1.00000                 0.50000
    ## 7            0.91818                 0.49091
    ## 8            0.92778                 0.45556
    ## 9            1.00000                 0.50000
    ## 10           0.91681                 0.74370

    corr_plot_comparison(condor_df = df_condor,
                         flowjo_df = df_flowjo,
                         sample_col = "sample_ID",
                         method_corr = "pearson",
                         tl.cex = 1,
                         cl.cex = 1)

    ## $corr
    ##                         FlowJo_B_class_switched FlowJo_CD4_CM FlowJo_CD8_CM
    ## Condor_B_class_switched               1.0000000     0.4070931    0.20753866
    ## Condor_CD4_CM                         0.4070931     1.0000000    0.49201297
    ## Condor_CD8_CM                         0.2075387     0.4920130    1.00000000
    ## Condor_CD69_pos                      -0.3384866     0.1769890    0.09909120
    ## Condor_Naive_CD4                     -0.2350425     0.3656488   -0.12471427
    ## Condor_Naive_CD8                     -0.2796814     0.2877308    0.15865182
    ## Condor_Treg                          -0.5213509    -0.5740163   -0.02528452
    ## Condor_DCs                           -0.2808977    -0.0330043    0.02388441
    ## Condor_NK_CD56dim                    -0.5875325    -0.4779746   -0.24093469
    ## Condor_Unconventional_T              -0.2050349    -0.3406658   -0.32539938
    ##                         FlowJo_CD69_pos FlowJo_Naive_CD4 FlowJo_Naive_CD8
    ## Condor_B_class_switched      -0.3384866      -0.23504254       -0.2796814
    ## Condor_CD4_CM                 0.1769890       0.36564884        0.2877308
    ## Condor_CD8_CM                 0.0990912      -0.12471427        0.1586518
    ## Condor_CD69_pos               1.0000000       0.51192706        0.4966880
    ## Condor_Naive_CD4              0.5119271       1.00000000        0.5404134
    ## Condor_Naive_CD8              0.4966880       0.54041336        1.0000000
    ## Condor_Treg                  -0.3012741      -0.33638501        0.2355740
    ## Condor_DCs                    0.2004797       0.39475280        0.8251330
    ## Condor_NK_CD56dim             0.1691775       0.06996937        0.3351444
    ## Condor_Unconventional_T      -0.3603367      -0.64692399       -0.3172894
    ##                         FlowJo_Treg  FlowJo_DCs FlowJo_NK_CD56dim
    ## Condor_B_class_switched -0.52135090 -0.28089773       -0.58753250
    ## Condor_CD4_CM           -0.57401632 -0.03300430       -0.47797463
    ## Condor_CD8_CM           -0.02528452  0.02388441       -0.24093469
    ## Condor_CD69_pos         -0.30127413  0.20047968        0.16917749
    ## Condor_Naive_CD4        -0.33638501  0.39475280        0.06996937
    ## Condor_Naive_CD8         0.23557398  0.82513302        0.33514439
    ## Condor_Treg              1.00000000  0.55599240        0.72054124
    ## Condor_DCs               0.55599240  1.00000000        0.69887312
    ## Condor_NK_CD56dim        0.72054124  0.69887312        1.00000000
    ## Condor_Unconventional_T  0.30378759 -0.40364451       -0.09851331
    ##                         FlowJo_Unconventional_T
    ## Condor_B_class_switched             -0.20503488
    ## Condor_CD4_CM                       -0.34066582
    ## Condor_CD8_CM                       -0.32539938
    ## Condor_CD69_pos                     -0.36033672
    ## Condor_Naive_CD4                    -0.64692399
    ## Condor_Naive_CD8                    -0.31728937
    ## Condor_Treg                          0.30378759
    ## Condor_DCs                          -0.40364451
    ## Condor_NK_CD56dim                   -0.09851331
    ## Condor_Unconventional_T              1.00000000
    ##
    ## $corrPos
    ##                      xName                   yName  x  y        corr
    ## 1  FlowJo_B_class_switched Condor_B_class_switched  1 10  1.00000000
    ## 2  FlowJo_B_class_switched           Condor_CD4_CM  1  9  0.40709305
    ## 3  FlowJo_B_class_switched           Condor_CD8_CM  1  8  0.20753866
    ## 4  FlowJo_B_class_switched         Condor_CD69_pos  1  7 -0.33848664
    ## 5  FlowJo_B_class_switched        Condor_Naive_CD4  1  6 -0.23504254
    ## 6  FlowJo_B_class_switched        Condor_Naive_CD8  1  5 -0.27968142
    ## 7  FlowJo_B_class_switched             Condor_Treg  1  4 -0.52135090
    ## 8  FlowJo_B_class_switched              Condor_DCs  1  3 -0.28089773
    ## 9  FlowJo_B_class_switched       Condor_NK_CD56dim  1  2 -0.58753250
    ## 10 FlowJo_B_class_switched Condor_Unconventional_T  1  1 -0.20503488
    ## 11           FlowJo_CD4_CM           Condor_CD4_CM  2  9  1.00000000
    ## 12           FlowJo_CD4_CM           Condor_CD8_CM  2  8  0.49201297
    ## 13           FlowJo_CD4_CM         Condor_CD69_pos  2  7  0.17698902
    ## 14           FlowJo_CD4_CM        Condor_Naive_CD4  2  6  0.36564884
    ## 15           FlowJo_CD4_CM        Condor_Naive_CD8  2  5  0.28773080
    ## 16           FlowJo_CD4_CM             Condor_Treg  2  4 -0.57401632
    ## 17           FlowJo_CD4_CM              Condor_DCs  2  3 -0.03300430
    ## 18           FlowJo_CD4_CM       Condor_NK_CD56dim  2  2 -0.47797463
    ## 19           FlowJo_CD4_CM Condor_Unconventional_T  2  1 -0.34066582
    ## 20           FlowJo_CD8_CM           Condor_CD8_CM  3  8  1.00000000
    ## 21           FlowJo_CD8_CM         Condor_CD69_pos  3  7  0.09909120
    ## 22           FlowJo_CD8_CM        Condor_Naive_CD4  3  6 -0.12471427
    ## 23           FlowJo_CD8_CM        Condor_Naive_CD8  3  5  0.15865182
    ## 24           FlowJo_CD8_CM             Condor_Treg  3  4 -0.02528452
    ## 25           FlowJo_CD8_CM              Condor_DCs  3  3  0.02388441
    ## 26           FlowJo_CD8_CM       Condor_NK_CD56dim  3  2 -0.24093469
    ## 27           FlowJo_CD8_CM Condor_Unconventional_T  3  1 -0.32539938
    ## 28         FlowJo_CD69_pos         Condor_CD69_pos  4  7  1.00000000
    ## 29         FlowJo_CD69_pos        Condor_Naive_CD4  4  6  0.51192706
    ## 30         FlowJo_CD69_pos        Condor_Naive_CD8  4  5  0.49668799
    ## 31         FlowJo_CD69_pos             Condor_Treg  4  4 -0.30127413
    ## 32         FlowJo_CD69_pos              Condor_DCs  4  3  0.20047968
    ## 33         FlowJo_CD69_pos       Condor_NK_CD56dim  4  2  0.16917749
    ## 34         FlowJo_CD69_pos Condor_Unconventional_T  4  1 -0.36033672
    ## 35        FlowJo_Naive_CD4        Condor_Naive_CD4  5  6  1.00000000
    ## 36        FlowJo_Naive_CD4        Condor_Naive_CD8  5  5  0.54041336
    ## 37        FlowJo_Naive_CD4             Condor_Treg  5  4 -0.33638501
    ## 38        FlowJo_Naive_CD4              Condor_DCs  5  3  0.39475280
    ## 39        FlowJo_Naive_CD4       Condor_NK_CD56dim  5  2  0.06996937
    ## 40        FlowJo_Naive_CD4 Condor_Unconventional_T  5  1 -0.64692399
    ## 41        FlowJo_Naive_CD8        Condor_Naive_CD8  6  5  1.00000000
    ## 42        FlowJo_Naive_CD8             Condor_Treg  6  4  0.23557398
    ## 43        FlowJo_Naive_CD8              Condor_DCs  6  3  0.82513302
    ## 44        FlowJo_Naive_CD8       Condor_NK_CD56dim  6  2  0.33514439
    ## 45        FlowJo_Naive_CD8 Condor_Unconventional_T  6  1 -0.31728937
    ## 46             FlowJo_Treg             Condor_Treg  7  4  1.00000000
    ## 47             FlowJo_Treg              Condor_DCs  7  3  0.55599240
    ## 48             FlowJo_Treg       Condor_NK_CD56dim  7  2  0.72054124
    ## 49             FlowJo_Treg Condor_Unconventional_T  7  1  0.30378759
    ## 50              FlowJo_DCs              Condor_DCs  8  3  1.00000000
    ## 51              FlowJo_DCs       Condor_NK_CD56dim  8  2  0.69887312
    ## 52              FlowJo_DCs Condor_Unconventional_T  8  1 -0.40364451
    ## 53       FlowJo_NK_CD56dim       Condor_NK_CD56dim  9  2  1.00000000
    ## 54       FlowJo_NK_CD56dim Condor_Unconventional_T  9  1 -0.09851331
    ## 55 FlowJo_Unconventional_T Condor_Unconventional_T 10  1  1.00000000
    ##
    ## $arg
    ## $arg$type
    ## [1] "lower"

## Session Info

    info <- sessionInfo()

    info

    ## R version 4.4.2 (2024-10-31)
    ## Platform: x86_64-pc-linux-gnu
    ## Running under: Ubuntu 24.04.1 LTS
    ##
    ## Matrix products: default
    ## BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
    ## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
    ##
    ## locale:
    ##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
    ##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
    ##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
    ##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
    ##  [9] LC_ADDRESS=C               LC_TELEPHONE=C
    ## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
    ##
    ## time zone: Etc/UTC
    ## tzcode source: system (glibc)
    ##
    ## attached base packages:
    ## [1] stats     graphics  grDevices utils     datasets  methods   base
    ##
    ## other attached packages:
    ## [1] cyCONDOR_0.3.1
    ##
    ## loaded via a namespace (and not attached):
    ##   [1] IRanges_2.40.1              Rmisc_1.5.1
    ##   [3] urlchecker_1.0.1            nnet_7.3-20
    ##   [5] CytoNorm_2.0.1              TH.data_1.1-3
    ##   [7] vctrs_0.6.5                 digest_0.6.37
    ##   [9] png_0.1-8                   shape_1.4.6.1
    ##  [11] proxy_0.4-27                slingshot_2.14.0
    ##  [13] ggrepel_0.9.6               corrplot_0.95
    ##  [15] parallelly_1.45.0           MASS_7.3-65
    ##  [17] pkgdown_2.1.3               reshape2_1.4.4
    ##  [19] httpuv_1.6.16               foreach_1.5.2
    ##  [21] BiocGenerics_0.52.0         withr_3.0.2
    ##  [23] ggrastr_1.0.2               xfun_0.52
    ##  [25] ggpubr_0.6.1                ellipsis_0.3.2
    ##  [27] survival_3.8-3              memoise_2.0.1
    ##  [29] hexbin_1.28.5               ggbeeswarm_0.7.2
    ##  [31] RProtoBufLib_2.18.0         princurve_2.1.6
    ##  [33] profvis_0.4.0               ggsci_3.2.0
    ##  [35] systemfonts_1.2.3           ragg_1.4.0
    ##  [37] zoo_1.8-14                  GlobalOptions_0.1.2
    ##  [39] DEoptimR_1.1-3-1            Formula_1.2-5
    ##  [41] promises_1.3.3              scatterplot3d_0.3-44
    ##  [43] httr_1.4.7                  rstatix_0.7.2
    ##  [45] globals_0.18.0              rstudioapi_0.17.1
    ##  [47] UCSC.utils_1.2.0            miniUI_0.1.2
    ##  [49] generics_0.1.4              ggcyto_1.34.0
    ##  [51] base64enc_0.1-3             curl_6.4.0
    ##  [53] S4Vectors_0.44.0            zlibbioc_1.52.0
    ##  [55] flowWorkspace_4.18.1        polyclip_1.10-7
    ##  [57] randomForest_4.7-1.2        GenomeInfoDbData_1.2.13
    ##  [59] SparseArray_1.6.2           RBGL_1.82.0
    ##  [61] ncdfFlow_2.52.1             RcppEigen_0.3.4.0.2
    ##  [63] xtable_1.8-4                stringr_1.5.1
    ##  [65] desc_1.4.3                  doParallel_1.0.17
    ##  [67] evaluate_1.0.4              S4Arrays_1.6.0
    ##  [69] hms_1.1.3                   glmnet_4.1-9
    ##  [71] GenomicRanges_1.58.0        irlba_2.3.5.1
    ##  [73] colorspace_2.1-1            harmony_1.2.3
    ##  [75] reticulate_1.42.0           readxl_1.4.5
    ##  [77] magrittr_2.0.3              lmtest_0.9-40
    ##  [79] readr_2.1.5                 Rgraphviz_2.50.0
    ##  [81] later_1.4.2                 lattice_0.22-7
    ##  [83] future.apply_1.20.0         robustbase_0.99-4-1
    ##  [85] XML_3.99-0.18               cowplot_1.2.0
    ##  [87] matrixStats_1.5.0           xts_0.14.1
    ##  [89] class_7.3-23                Hmisc_5.2-3
    ##  [91] pillar_1.11.0               nlme_3.1-168
    ##  [93] iterators_1.0.14            compiler_4.4.2
    ##  [95] RSpectra_0.16-2             stringi_1.8.7
    ##  [97] gower_1.0.2                 minqa_1.2.8
    ##  [99] SummarizedExperiment_1.36.0 lubridate_1.9.4
    ## [101] devtools_2.4.5              CytoML_2.18.3
    ## [103] plyr_1.8.9                  crayon_1.5.3
    ## [105] abind_1.4-8                 locfit_1.5-9.12
    ## [107] sp_2.2-0                    sandwich_3.1-1
    ## [109] pcaMethods_1.98.0           dplyr_1.1.4
    ## [111] codetools_0.2-20            multcomp_1.4-28
    ## [113] textshaping_1.0.1           recipes_1.3.1
    ## [115] openssl_2.3.3               Rphenograph_0.99.1
    ## [117] TTR_0.24.4                  bslib_0.9.0
    ## [119] e1071_1.7-16                destiny_3.20.0
    ## [121] GetoptLong_1.0.5            ggplot.multistats_1.0.1
    ## [123] mime_0.13                   splines_4.4.2
    ## [125] circlize_0.4.16             Rcpp_1.1.0
    ## [127] sparseMatrixStats_1.18.0    cellranger_1.1.0
    ## [129] knitr_1.50                  clue_0.3-66
    ## [131] lme4_1.1-37                 fs_1.6.6
    ## [133] listenv_0.9.1               checkmate_2.3.2
    ## [135] DelayedMatrixStats_1.28.1   Rdpack_2.6.4
    ## [137] pkgbuild_1.4.8              ggsignif_0.6.4
    ## [139] tibble_3.3.0                Matrix_1.7-3
    ## [141] rpart.plot_3.1.2            statmod_1.5.0
    ## [143] tzdb_0.5.0                  tweenr_2.0.3
    ## [145] pkgconfig_2.0.3             pheatmap_1.0.13
    ## [147] tools_4.4.2                 cachem_1.1.0
    ## [149] rbibutils_2.3               smoother_1.3
    ## [151] fastmap_1.2.0               rmarkdown_2.29
    ## [153] scales_1.4.0                grid_4.4.2
    ## [155] usethis_3.1.0               broom_1.0.8
    ## [157] sass_0.4.10                 graph_1.84.1
    ## [159] carData_3.0-5               RANN_2.6.2
    ## [161] rpart_4.1.24                farver_2.1.2
    ## [163] reformulas_0.4.1            yaml_2.3.10
    ## [165] MatrixGenerics_1.18.1       foreign_0.8-90
    ## [167] ggthemes_5.1.0              cli_3.6.5
    ## [169] purrr_1.1.0                 stats4_4.4.2
    ## [171] lifecycle_1.0.4             uwot_0.2.3
    ## [173] askpass_1.2.1               caret_7.0-1
    ## [175] Biobase_2.66.0              mvtnorm_1.3-3
    ## [177] lava_1.8.1                  sessioninfo_1.2.3
    ## [179] backports_1.5.0             cytolib_2.18.2
    ## [181] timechange_0.3.0            gtable_0.3.6
    ## [183] rjson_0.2.23                umap_0.2.10.0
    ## [185] ggridges_0.5.6              parallel_4.4.2
    ## [187] pROC_1.18.5                 limma_3.62.2
    ## [189] jsonlite_2.0.0              edgeR_4.4.2
    ## [191] RcppHNSW_0.6.0              ggplot2_3.5.2
    ## [193] Rtsne_0.17                  FlowSOM_2.14.0
    ## [195] ranger_0.17.0               flowCore_2.18.0
    ## [197] jquerylib_0.1.4             timeDate_4041.110
    ## [199] shiny_1.11.1                ConsensusClusterPlus_1.70.0
    ## [201] htmltools_0.5.8.1           diffcyt_1.26.1
    ## [203] rappdirs_0.3.3              glue_1.8.0
    ## [205] XVector_0.46.0              VIM_6.2.2
    ## [207] gridExtra_2.3               boot_1.3-31
    ## [209] TrajectoryUtils_1.14.0      igraph_2.1.4
    ## [211] R6_2.6.1                    tidyr_1.3.1
    ## [213] SingleCellExperiment_1.28.1 vcd_1.4-13
    ## [215] cluster_2.1.8.1             pkgload_1.4.0
    ## [217] GenomeInfoDb_1.42.3         ipred_0.9-15
    ## [219] nloptr_2.2.1                DelayedArray_0.32.0
    ## [221] tidyselect_1.2.1            vipor_0.4.7
    ## [223] htmlTable_2.4.3             ggforce_0.5.0
    ## [225] CytoDx_1.26.0               car_3.1-3
    ## [227] future_1.58.0               ModelMetrics_1.2.2.2
    ## [229] laeken_0.5.3                data.table_1.17.8
    ## [231] htmlwidgets_1.6.4           ComplexHeatmap_2.22.0
    ## [233] RColorBrewer_1.1-3          rlang_1.1.6
    ## [235] remotes_2.5.0               colorRamps_2.3.4
    ## [237] ggnewscale_0.5.2            hardhat_1.4.1
    ## [239] beeswarm_0.4.0              prodlim_2025.04.28