SingleCellSignalR :
Inference of ligand-receptor interactions from single-cell data

Jacques Colinge

Institut de Recherche en Cancérologie de Montpellier, Inserm, Montpellier, France
jacques.colinge@inserm.fr

Jean-Philippe Villemin

Institut de Recherche en Cancérologie de Montpellier, Inserm, Montpellier, France
jean-philippe.villemin@inserm.fr

10/01/2025

Abstract

SingleCellSignalR is used to infer ligand-receptor (L-R) interactions from single-cell transcriptomics or proteomics data. Potential L-R interactions are taken from the LRdb database, which is accessed through our BulkSignalR library.

By default, inferences rely on a statistical model linking potential L-R interactions with biological pathways from Reactome or biological processes from GO. This model is provided by BulkSignalR, which we used as a basic layer to implement SingleCellSignalR Version 2. Alternatively, the purely expression-based score in Version 1 of SingleCellSignalR, the so-called LR-score, remains available.



Code
library(BulkSignalR)
library(SingleCellSignalR)

SingleCellSignalR package version: 1.99.1

 

What is it for?

SingleCellSignalR is a tool that enables the inference of L-R interactions from single-cell data.

See also BulkSignalR vignette for a more complete description of all functionalities.

 

Main worfklow

The following code snippet give an example of the main commands to use in order to process your dataset with SingleCellSignalR package.

Code
data(example_dataset,package='SingleCellSignalR')
mat <- log1p(data.matrix(example_dataset[,-1]))/log(2)
rownames(mat) <- example_dataset[[1]]
rme <- rowMeans(mat)
mmat <- mat[rme>0.05,]
d <- dist(t(mmat))
h <- hclust(d, method="ward.D")
clusters <- paste0("pop_", cutree(h, 5))

# SCSRNoNet -> LRscore based approach

scsrnn <- SCSRNoNet(mat,normalize=FALSE,method="log-only",
    min.count=1,prop=0.001,
    log.transformed=TRUE,populations=clusters)

scsrnn <- performInferences(scsrnn,verbose=TRUE,
    min.logFC=1e-10,max.pval=1,min.LR.score=0.5)
## Computing diffential expression tables:
##  pop_1
##  pop_2
##  pop_3
##  pop_4
##  pop_5
## Computing autocrine naive (network-free) interactions
## Computing paracrine naive (network-free) interactions
Code
# SCSRNet -> DifferentialMode based approach

scsrcn <- SCSRNet(mat,normalize=FALSE,method="log-only",
    min.count=1,prop=0.001,
    log.transformed=TRUE,populations=clusters)

if(FALSE){
scsrcn <- performInferences(scsrcn,
    selected.populations = c("pop_1","pop_2","pop_3"),
    verbose=TRUE,rank.p=0.8,
    min.logFC=log2(1.01),max.pval=0.05)

print("getAutocrines")
inter1 <- getAutocrines(scsrcn, "pop_1")
head(inter1)

print("getParacrines")
inter2 <- getParacrines(scsrcn, "pop_1","pop_2")
head(inter2)

# Visualisation

cellNetBubblePlot(scsrcn)
}

 

Acknowledgements

We thank Morgan Maillard for his help with the LRdb database and Pierre Giroux for the work with proteomics.

 

Thank you for reading this guide and for using SingleCellSignalR.

 

Session Information

Code
sessionInfo()
## R version 4.5.1 Patched (2025-09-10 r88807)
## Platform: aarch64-apple-darwin20
## Running under: macOS Ventura 13.7.7
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRblas.0.dylib 
## LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1
## 
## locale:
## [1] C/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## time zone: America/New_York
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] SingleCellSignalR_1.99.1 BulkSignalR_1.1.5       
## 
## loaded via a namespace (and not attached):
##   [1] RColorBrewer_1.1-3          jsonlite_2.0.0             
##   [3] shape_1.4.6.1               magrittr_2.0.4             
##   [5] magick_2.9.0                farver_2.1.2               
##   [7] rmarkdown_2.30              GlobalOptions_0.1.2        
##   [9] fs_1.6.6                    vctrs_0.6.5                
##  [11] multtest_2.65.0             matrixTests_0.2.3          
##  [13] memoise_2.0.1               RCurl_1.98-1.17            
##  [15] ggtree_3.99.0               rstatix_0.7.2              
##  [17] htmltools_0.5.8.1           S4Arrays_1.9.1             
##  [19] curl_7.0.0                  broom_1.0.10               
##  [21] SparseArray_1.9.1           Formula_1.2-5              
##  [23] gridGraphics_0.5-1          sass_0.4.10                
##  [25] bslib_0.9.0                 htmlwidgets_1.6.4          
##  [27] httr2_1.2.1                 plotly_4.11.0              
##  [29] cachem_1.1.0                uuid_1.2-1                 
##  [31] igraph_2.1.4                lifecycle_1.0.4            
##  [33] iterators_1.0.14            pkgconfig_2.0.3            
##  [35] Matrix_1.7-4                R6_2.6.1                   
##  [37] fastmap_1.2.0               MatrixGenerics_1.21.0      
##  [39] clue_0.3-66                 digest_0.6.37              
##  [41] aplot_0.2.9                 colorspace_2.1-2           
##  [43] patchwork_1.3.2             S4Vectors_0.47.4           
##  [45] grr_0.9.5                   GenomicRanges_1.61.5       
##  [47] RSQLite_2.4.3               ggpubr_0.6.1               
##  [49] filelock_1.0.3              httr_1.4.7                 
##  [51] abind_1.4-8                 compiler_4.5.1             
##  [53] withr_3.0.2                 bit64_4.6.0-1              
##  [55] doParallel_1.0.17           S7_0.2.0                   
##  [57] backports_1.5.0             orthogene_1.15.02          
##  [59] carData_3.0-5               DBI_1.2.3                  
##  [61] homologene_1.4.68.19.3.27   ggsignif_0.6.4             
##  [63] MASS_7.3-65                 rappdirs_0.3.3             
##  [65] DelayedArray_0.35.3         rjson_0.2.23               
##  [67] tools_4.5.1                 ape_5.8-1                  
##  [69] glue_1.8.0                  stabledist_0.7-2           
##  [71] nlme_3.1-168                grid_4.5.1                 
##  [73] Rtsne_0.17                  cluster_2.1.8.1            
##  [75] generics_0.1.4              gtable_0.3.6               
##  [77] tidyr_1.3.1                 data.table_1.17.8          
##  [79] car_3.1-3                   XVector_0.49.1             
##  [81] BiocGenerics_0.55.1         ggrepel_0.9.6              
##  [83] RANN_2.6.2                  foreach_1.5.2              
##  [85] pillar_1.11.1               yulab.utils_0.2.1          
##  [87] babelgene_22.9              circlize_0.4.16            
##  [89] splines_4.5.1               dplyr_1.1.4                
##  [91] BiocFileCache_2.99.6        treeio_1.33.0              
##  [93] lattice_0.22-7              survival_3.8-3             
##  [95] bit_4.6.0                   tidyselect_1.2.1           
##  [97] ComplexHeatmap_2.25.2       SingleCellExperiment_1.31.1
##  [99] knitr_1.50                  gridExtra_2.3              
## [101] IRanges_2.43.5              Seqinfo_0.99.2             
## [103] SummarizedExperiment_1.39.2 stats4_4.5.1               
## [105] xfun_0.53                   Biobase_2.69.1             
## [107] matrixStats_1.5.0           lazyeval_0.2.2             
## [109] ggfun_0.2.0                 yaml_2.3.10                
## [111] evaluate_1.0.5              codetools_0.2-20           
## [113] tibble_3.3.0                ggplotify_0.1.3            
## [115] cli_3.6.5                   systemfonts_1.3.1          
## [117] jquerylib_0.1.4             dichromat_2.0-0.1          
## [119] Rcpp_1.1.0                  dbplyr_2.5.1               
## [121] gprofiler2_0.2.3            png_0.1-8                  
## [123] parallel_4.5.1              ggplot2_4.0.0              
## [125] blob_1.2.4                  ggalluvial_0.12.5          
## [127] bitops_1.0-9                glmnet_4.1-10              
## [129] SpatialExperiment_1.19.1    viridisLite_0.4.2          
## [131] tidytree_0.4.6              ggiraph_0.9.1              
## [133] scales_1.4.0                purrr_1.1.0                
## [135] crayon_1.5.3                GetoptLong_1.0.5           
## [137] rlang_1.1.6