biotidy

Introduction

biotidy package offers useful utilities for integrating Bioinformatic objects such as SummarizedExperiment and Seurat into the tidy(verse) framework.

It is important to note that biotidy serves a different purpose compared to tidyomics, which primarily utilizes a pipe-based workflow for managing bioinformatic objects. Specifically, biotidy provides a method for extracting a data frame from bioinformatic objects, similar to how the broom::tidy function operates on statistical model objects. The inspiration for biotidy came from the functionality of the scuttle::makePerCellDF and scuttle::makePerFeatureDF functions on the SingleCellExperiment object. The biotidy package extends these functions to work with other bioinformatic objects, such as SummarizedExperiment, ExpressionSet, and Seurat.

Prepare data

library(biotidy)
mocked_se <- mockSE()
mocked_sce <- mockSCE()
mocked_es <- mockES()
mocked_seurat <- mockSeurat()

makePerCellDF

makePerCellDF creates a per-cell data.frame (i.e., where each row represents a sample / cell) from the Bioinformatic objects.

# SummarizedExperiment method
makePerCellDF(mocked_se)[1:5, 1:5]
#>         Gene0001 Gene0002 Gene0003 Gene0004 Gene0005
#> Cell001       10        1        9       62      463
#> Cell002        0        0       33        0      771
#> Cell003        0        0      140        3      662
#> Cell004        5        0       36        0      130
#> Cell005        0        0       12        0       87
makePerCellDF(mocked_se, melt = TRUE)[1:5, 1:5]
#>   Mutation_Status Cell_Cycle Treatment .features .assay
#> 1        negative         G0    treat1  Gene0001     10
#> 2        negative         G0    treat2  Gene0001      0
#> 3        negative         G0    treat2  Gene0001      0
#> 4        negative         G0    treat1  Gene0001      5
#> 5        positive          S    treat2  Gene0001      0
makePerCellDF(mocked_se, melt = TRUE, keep_rownames = TRUE)[1:5, 1:5]
#>       .id Mutation_Status Cell_Cycle Treatment .features
#> 1 Cell001        negative         G0    treat1  Gene0001
#> 2 Cell002        negative         G0    treat2  Gene0001
#> 3 Cell003        negative         G0    treat2  Gene0001
#> 4 Cell004        negative         G0    treat1  Gene0001
#> 5 Cell005        positive          S    treat2  Gene0001
makePerCellDF(mocked_se, features = FALSE, use_coldata = FALSE)
#> data frame with 0 columns and 200 rows
# SingleCellExperiment method
makePerCellDF(mocked_sce)[1:5, 1:5]
#>         Gene0001 Gene0002 Gene0003 Gene0004 Gene0005
#> Cell001        0      300       12        0        2
#> Cell002        4       50       35        0       17
#> Cell003       62      138        0        0        0
#> Cell004        1       71       40        7        3
#> Cell005        7      315        0        1      219
makePerCellDF(mocked_sce, melt = TRUE)[1:5, 1:5]
#>   Mutation_Status Cell_Cycle Treatment .features .assay
#> 1        positive         G0    treat2  Gene0001      0
#> 2        positive         G1    treat2  Gene0001      4
#> 3        positive         G1    treat2  Gene0001     62
#> 4        negative         G0    treat2  Gene0001      1
#> 5        positive         G0    treat1  Gene0001      7
makePerCellDF(mocked_sce, melt = TRUE, keep_rownames = TRUE)[1:5, 1:5]
#>       .id Mutation_Status Cell_Cycle Treatment .features
#> 1 Cell001        positive         G0    treat2  Gene0001
#> 2 Cell002        positive         G1    treat2  Gene0001
#> 3 Cell003        positive         G1    treat2  Gene0001
#> 4 Cell004        negative         G0    treat2  Gene0001
#> 5 Cell005        positive         G0    treat1  Gene0001
makePerCellDF(mocked_sce, features = FALSE, use_coldata = FALSE)
#> data frame with 0 columns and 200 rows
# ExpressionSet method
makePerCellDF(mocked_es)[1:5, 1:5]
#>         Gene0001 Gene0002 Gene0003 Gene0004 Gene0005
#> Cell001        1      197       28        0      267
#> Cell002        0      717        0      156      218
#> Cell003        8      266        0       63       23
#> Cell004        0      104        0       35       65
#> Cell005       30       70       17        1       14
makePerCellDF(mocked_es, melt = TRUE)[1:5, 1:5]
#>   Mutation_Status Cell_Cycle Treatment .features .assay
#> 1        negative         G0    treat2  Gene0001      1
#> 2        positive        G2M    treat1  Gene0001      0
#> 3        positive         G1    treat2  Gene0001      8
#> 4        positive         G1    treat1  Gene0001      0
#> 5        negative         G1    treat2  Gene0001     30
makePerCellDF(mocked_es, melt = TRUE, keep_rownames = TRUE)[1:5, 1:5]
#>       .id Mutation_Status Cell_Cycle Treatment .features
#> 1 Cell001        negative         G0    treat2  Gene0001
#> 2 Cell002        positive        G2M    treat1  Gene0001
#> 3 Cell003        positive         G1    treat2  Gene0001
#> 4 Cell004        positive         G1    treat1  Gene0001
#> 5 Cell005        negative         G1    treat2  Gene0001
makePerCellDF(mocked_es, features = FALSE, use_coldata = FALSE)
#> data frame with 0 columns and 200 rows
# Seurat method
makePerCellDF(mocked_seurat, layer = "counts")[1:5, 1:5]
#>         Gene0001 Gene0002 Gene0003 Gene0004 Gene0005
#> Cell001     1071        0       34      242        0
#> Cell002       68       29        7       11       33
#> Cell003     1031       29       26        8        0
#> Cell004      229      146        0       42        0
#> Cell005      175        2        0        6        0
makePerCellDF(mocked_seurat, layer = "counts", melt = TRUE)[1:5, 1:5]
#>      orig.ident nCount_RNA nFeature_RNA Mutation_Status Cell_Cycle
#> 1 SeuratProject     373099         1500        negative         G1
#> 2 SeuratProject     373035         1485        negative         G0
#> 3 SeuratProject     382296         1493        positive         G1
#> 4 SeuratProject     371158         1499        positive        G2M
#> 5 SeuratProject     363324         1494        positive          S
makePerCellDF(mocked_seurat,
  layer = "counts", melt = TRUE, keep_rownames = TRUE
)[1:5, 1:5]
#>       .id    orig.ident nCount_RNA nFeature_RNA Mutation_Status
#> 1 Cell001 SeuratProject     373099         1500        negative
#> 2 Cell002 SeuratProject     373035         1485        negative
#> 3 Cell003 SeuratProject     382296         1493        positive
#> 4 Cell004 SeuratProject     371158         1499        positive
#> 5 Cell005 SeuratProject     363324         1494        positive
makePerCellDF(mocked_seurat,
  layer = "counts", features = FALSE, use_coldata =
    FALSE
)
#> data frame with 0 columns and 200 rows

makePerFeatureDF

makePerFeatureDF Create a per-feature data.frame (i.e., where each row represents a feature / gene).

# SummarizedExperiment method
makePerFeatureDF(mocked_se)[1:5, 1:5]
#>          Cell001 Cell002 Cell003 Cell004 Cell005
#> Gene0001      10       0       0       5       0
#> Gene0002       1       0       0       0       0
#> Gene0003       9      33     140      36      12
#> Gene0004      62       0       3       0       0
#> Gene0005     463     771     662     130      87
makePerFeatureDF(mocked_se, melt = TRUE)[1:5, ]
#>    .cells .assay
#> 1 Cell001     10
#> 2 Cell001      1
#> 3 Cell001      9
#> 4 Cell001     62
#> 5 Cell001    463
makePerFeatureDF(mocked_se, melt = TRUE, keep_rownames = TRUE)[1:5, ]
#>        .id  .cells .assay
#> 1 Gene0001 Cell001     10
#> 2 Gene0002 Cell001      1
#> 3 Gene0003 Cell001      9
#> 4 Gene0004 Cell001     62
#> 5 Gene0005 Cell001    463
makePerFeatureDF(mocked_se, features = FALSE, use_rowdata = FALSE)
#>   [1] Cell001 Cell002 Cell003 Cell004 Cell005 Cell006 Cell007 Cell008 Cell009
#>  [10] Cell010 Cell011 Cell012 Cell013 Cell014 Cell015 Cell016 Cell017 Cell018
#>  [19] Cell019 Cell020 Cell021 Cell022 Cell023 Cell024 Cell025 Cell026 Cell027
#>  [28] Cell028 Cell029 Cell030 Cell031 Cell032 Cell033 Cell034 Cell035 Cell036
#>  [37] Cell037 Cell038 Cell039 Cell040 Cell041 Cell042 Cell043 Cell044 Cell045
#>  [46] Cell046 Cell047 Cell048 Cell049 Cell050 Cell051 Cell052 Cell053 Cell054
#>  [55] Cell055 Cell056 Cell057 Cell058 Cell059 Cell060 Cell061 Cell062 Cell063
#>  [64] Cell064 Cell065 Cell066 Cell067 Cell068 Cell069 Cell070 Cell071 Cell072
#>  [73] Cell073 Cell074 Cell075 Cell076 Cell077 Cell078 Cell079 Cell080 Cell081
#>  [82] Cell082 Cell083 Cell084 Cell085 Cell086 Cell087 Cell088 Cell089 Cell090
#>  [91] Cell091 Cell092 Cell093 Cell094 Cell095 Cell096 Cell097 Cell098 Cell099
#> [100] Cell100 Cell101 Cell102 Cell103 Cell104 Cell105 Cell106 Cell107 Cell108
#> [109] Cell109 Cell110 Cell111 Cell112 Cell113 Cell114 Cell115 Cell116 Cell117
#> [118] Cell118 Cell119 Cell120 Cell121 Cell122 Cell123 Cell124 Cell125 Cell126
#> [127] Cell127 Cell128 Cell129 Cell130 Cell131 Cell132 Cell133 Cell134 Cell135
#> [136] Cell136 Cell137 Cell138 Cell139 Cell140 Cell141 Cell142 Cell143 Cell144
#> [145] Cell145 Cell146 Cell147 Cell148 Cell149 Cell150 Cell151 Cell152 Cell153
#> [154] Cell154 Cell155 Cell156 Cell157 Cell158 Cell159 Cell160 Cell161 Cell162
#> [163] Cell163 Cell164 Cell165 Cell166 Cell167 Cell168 Cell169 Cell170 Cell171
#> [172] Cell172 Cell173 Cell174 Cell175 Cell176 Cell177 Cell178 Cell179 Cell180
#> [181] Cell181 Cell182 Cell183 Cell184 Cell185 Cell186 Cell187 Cell188 Cell189
#> [190] Cell190 Cell191 Cell192 Cell193 Cell194 Cell195 Cell196 Cell197 Cell198
#> [199] Cell199 Cell200
#> <0 rows> (or 0-length row.names)
# SingleCellExperiment method
makePerFeatureDF(mocked_sce)[1:5, 1:5]
#>          Cell001 Cell002 Cell003 Cell004 Cell005
#> Gene0001       0       4      62       1       7
#> Gene0002     300      50     138      71     315
#> Gene0003      12      35       0      40       0
#> Gene0004       0       0       0       7       1
#> Gene0005       2      17       0       3     219
makePerFeatureDF(mocked_sce, melt = TRUE)[1:5, ]
#>    .cells .assay
#> 1 Cell001      0
#> 2 Cell001    300
#> 3 Cell001     12
#> 4 Cell001      0
#> 5 Cell001      2
makePerFeatureDF(mocked_sce, melt = TRUE, keep_rownames = TRUE)[1:5, ]
#>        .id  .cells .assay
#> 1 Gene0001 Cell001      0
#> 2 Gene0002 Cell001    300
#> 3 Gene0003 Cell001     12
#> 4 Gene0004 Cell001      0
#> 5 Gene0005 Cell001      2
makePerFeatureDF(mocked_sce, features = FALSE, use_rowdata = FALSE)
#>   [1] Cell001 Cell002 Cell003 Cell004 Cell005 Cell006 Cell007 Cell008 Cell009
#>  [10] Cell010 Cell011 Cell012 Cell013 Cell014 Cell015 Cell016 Cell017 Cell018
#>  [19] Cell019 Cell020 Cell021 Cell022 Cell023 Cell024 Cell025 Cell026 Cell027
#>  [28] Cell028 Cell029 Cell030 Cell031 Cell032 Cell033 Cell034 Cell035 Cell036
#>  [37] Cell037 Cell038 Cell039 Cell040 Cell041 Cell042 Cell043 Cell044 Cell045
#>  [46] Cell046 Cell047 Cell048 Cell049 Cell050 Cell051 Cell052 Cell053 Cell054
#>  [55] Cell055 Cell056 Cell057 Cell058 Cell059 Cell060 Cell061 Cell062 Cell063
#>  [64] Cell064 Cell065 Cell066 Cell067 Cell068 Cell069 Cell070 Cell071 Cell072
#>  [73] Cell073 Cell074 Cell075 Cell076 Cell077 Cell078 Cell079 Cell080 Cell081
#>  [82] Cell082 Cell083 Cell084 Cell085 Cell086 Cell087 Cell088 Cell089 Cell090
#>  [91] Cell091 Cell092 Cell093 Cell094 Cell095 Cell096 Cell097 Cell098 Cell099
#> [100] Cell100 Cell101 Cell102 Cell103 Cell104 Cell105 Cell106 Cell107 Cell108
#> [109] Cell109 Cell110 Cell111 Cell112 Cell113 Cell114 Cell115 Cell116 Cell117
#> [118] Cell118 Cell119 Cell120 Cell121 Cell122 Cell123 Cell124 Cell125 Cell126
#> [127] Cell127 Cell128 Cell129 Cell130 Cell131 Cell132 Cell133 Cell134 Cell135
#> [136] Cell136 Cell137 Cell138 Cell139 Cell140 Cell141 Cell142 Cell143 Cell144
#> [145] Cell145 Cell146 Cell147 Cell148 Cell149 Cell150 Cell151 Cell152 Cell153
#> [154] Cell154 Cell155 Cell156 Cell157 Cell158 Cell159 Cell160 Cell161 Cell162
#> [163] Cell163 Cell164 Cell165 Cell166 Cell167 Cell168 Cell169 Cell170 Cell171
#> [172] Cell172 Cell173 Cell174 Cell175 Cell176 Cell177 Cell178 Cell179 Cell180
#> [181] Cell181 Cell182 Cell183 Cell184 Cell185 Cell186 Cell187 Cell188 Cell189
#> [190] Cell190 Cell191 Cell192 Cell193 Cell194 Cell195 Cell196 Cell197 Cell198
#> [199] Cell199 Cell200
#> <0 rows> (or 0-length row.names)
# ExpressionSet method
makePerFeatureDF(mocked_es)[1:5, 1:5]
#>          Cell001 Cell002 Cell003 Cell004 Cell005
#> Gene0001       1       0       8       0      30
#> Gene0002     197     717     266     104      70
#> Gene0003      28       0       0       0      17
#> Gene0004       0     156      63      35       1
#> Gene0005     267     218      23      65      14
makePerFeatureDF(mocked_es, melt = TRUE)[1:5, ]
#>    .cells .assay
#> 1 Cell001      1
#> 2 Cell001    197
#> 3 Cell001     28
#> 4 Cell001      0
#> 5 Cell001    267
makePerFeatureDF(mocked_es, melt = TRUE, keep_rownames = TRUE)[1:5, ]
#>        .id  .cells .assay
#> 1 Gene0001 Cell001      1
#> 2 Gene0002 Cell001    197
#> 3 Gene0003 Cell001     28
#> 4 Gene0004 Cell001      0
#> 5 Gene0005 Cell001    267
makePerFeatureDF(mocked_es, features = FALSE, use_rowdata = FALSE)
#>   [1] Cell001 Cell002 Cell003 Cell004 Cell005 Cell006 Cell007 Cell008 Cell009
#>  [10] Cell010 Cell011 Cell012 Cell013 Cell014 Cell015 Cell016 Cell017 Cell018
#>  [19] Cell019 Cell020 Cell021 Cell022 Cell023 Cell024 Cell025 Cell026 Cell027
#>  [28] Cell028 Cell029 Cell030 Cell031 Cell032 Cell033 Cell034 Cell035 Cell036
#>  [37] Cell037 Cell038 Cell039 Cell040 Cell041 Cell042 Cell043 Cell044 Cell045
#>  [46] Cell046 Cell047 Cell048 Cell049 Cell050 Cell051 Cell052 Cell053 Cell054
#>  [55] Cell055 Cell056 Cell057 Cell058 Cell059 Cell060 Cell061 Cell062 Cell063
#>  [64] Cell064 Cell065 Cell066 Cell067 Cell068 Cell069 Cell070 Cell071 Cell072
#>  [73] Cell073 Cell074 Cell075 Cell076 Cell077 Cell078 Cell079 Cell080 Cell081
#>  [82] Cell082 Cell083 Cell084 Cell085 Cell086 Cell087 Cell088 Cell089 Cell090
#>  [91] Cell091 Cell092 Cell093 Cell094 Cell095 Cell096 Cell097 Cell098 Cell099
#> [100] Cell100 Cell101 Cell102 Cell103 Cell104 Cell105 Cell106 Cell107 Cell108
#> [109] Cell109 Cell110 Cell111 Cell112 Cell113 Cell114 Cell115 Cell116 Cell117
#> [118] Cell118 Cell119 Cell120 Cell121 Cell122 Cell123 Cell124 Cell125 Cell126
#> [127] Cell127 Cell128 Cell129 Cell130 Cell131 Cell132 Cell133 Cell134 Cell135
#> [136] Cell136 Cell137 Cell138 Cell139 Cell140 Cell141 Cell142 Cell143 Cell144
#> [145] Cell145 Cell146 Cell147 Cell148 Cell149 Cell150 Cell151 Cell152 Cell153
#> [154] Cell154 Cell155 Cell156 Cell157 Cell158 Cell159 Cell160 Cell161 Cell162
#> [163] Cell163 Cell164 Cell165 Cell166 Cell167 Cell168 Cell169 Cell170 Cell171
#> [172] Cell172 Cell173 Cell174 Cell175 Cell176 Cell177 Cell178 Cell179 Cell180
#> [181] Cell181 Cell182 Cell183 Cell184 Cell185 Cell186 Cell187 Cell188 Cell189
#> [190] Cell190 Cell191 Cell192 Cell193 Cell194 Cell195 Cell196 Cell197 Cell198
#> [199] Cell199 Cell200
#> <0 rows> (or 0-length row.names)
# Seurat method
makePerFeatureDF(mocked_seurat, layer = "counts")[1:5, 1:5]
#>          Cell001 Cell002 Cell003 Cell004 Cell005
#> Gene0001    1071      68    1031     229     175
#> Gene0002       0      29      29     146       2
#> Gene0003      34       7      26       0       0
#> Gene0004     242      11       8      42       6
#> Gene0005       0      33       0       0       0
makePerFeatureDF(mocked_seurat, layer = "counts", melt = TRUE)[1:5, ]
#>    .cells .assay
#> 1 Cell001   1071
#> 2 Cell001      0
#> 3 Cell001     34
#> 4 Cell001    242
#> 5 Cell001      0
makePerFeatureDF(mocked_seurat,
  layer = "counts", melt = TRUE, keep_rownames = TRUE
)[1:5, ]
#>        .id  .cells .assay
#> 1 Gene0001 Cell001   1071
#> 2 Gene0002 Cell001      0
#> 3 Gene0003 Cell001     34
#> 4 Gene0004 Cell001    242
#> 5 Gene0005 Cell001      0
makePerFeatureDF(mocked_seurat,
  layer = "counts", features = FALSE,
  use_rowdata = FALSE
)
#>   [1] Cell001 Cell002 Cell003 Cell004 Cell005 Cell006 Cell007 Cell008 Cell009
#>  [10] Cell010 Cell011 Cell012 Cell013 Cell014 Cell015 Cell016 Cell017 Cell018
#>  [19] Cell019 Cell020 Cell021 Cell022 Cell023 Cell024 Cell025 Cell026 Cell027
#>  [28] Cell028 Cell029 Cell030 Cell031 Cell032 Cell033 Cell034 Cell035 Cell036
#>  [37] Cell037 Cell038 Cell039 Cell040 Cell041 Cell042 Cell043 Cell044 Cell045
#>  [46] Cell046 Cell047 Cell048 Cell049 Cell050 Cell051 Cell052 Cell053 Cell054
#>  [55] Cell055 Cell056 Cell057 Cell058 Cell059 Cell060 Cell061 Cell062 Cell063
#>  [64] Cell064 Cell065 Cell066 Cell067 Cell068 Cell069 Cell070 Cell071 Cell072
#>  [73] Cell073 Cell074 Cell075 Cell076 Cell077 Cell078 Cell079 Cell080 Cell081
#>  [82] Cell082 Cell083 Cell084 Cell085 Cell086 Cell087 Cell088 Cell089 Cell090
#>  [91] Cell091 Cell092 Cell093 Cell094 Cell095 Cell096 Cell097 Cell098 Cell099
#> [100] Cell100 Cell101 Cell102 Cell103 Cell104 Cell105 Cell106 Cell107 Cell108
#> [109] Cell109 Cell110 Cell111 Cell112 Cell113 Cell114 Cell115 Cell116 Cell117
#> [118] Cell118 Cell119 Cell120 Cell121 Cell122 Cell123 Cell124 Cell125 Cell126
#> [127] Cell127 Cell128 Cell129 Cell130 Cell131 Cell132 Cell133 Cell134 Cell135
#> [136] Cell136 Cell137 Cell138 Cell139 Cell140 Cell141 Cell142 Cell143 Cell144
#> [145] Cell145 Cell146 Cell147 Cell148 Cell149 Cell150 Cell151 Cell152 Cell153
#> [154] Cell154 Cell155 Cell156 Cell157 Cell158 Cell159 Cell160 Cell161 Cell162
#> [163] Cell163 Cell164 Cell165 Cell166 Cell167 Cell168 Cell169 Cell170 Cell171
#> [172] Cell172 Cell173 Cell174 Cell175 Cell176 Cell177 Cell178 Cell179 Cell180
#> [181] Cell181 Cell182 Cell183 Cell184 Cell185 Cell186 Cell187 Cell188 Cell189
#> [190] Cell190 Cell191 Cell192 Cell193 Cell194 Cell195 Cell196 Cell197 Cell198
#> [199] Cell199 Cell200
#> <0 rows> (or 0-length row.names)

Session information

sessionInfo()
#> R version 4.4.1 (2024-06-14)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 22.04.4 LTS
#> 
#> Matrix products: default
#> BLAS:   /home/biocbuild/bbs-3.20-bioc/R/lib/libRblas.so 
#> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_GB              LC_COLLATE=C              
#>  [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: America/New_York
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#> [1] biotidy_0.99.0
#> 
#> loaded via a namespace (and not attached):
#>  [1] sass_0.4.9                  future_1.33.2              
#>  [3] generics_0.1.3              SparseArray_1.5.22         
#>  [5] lattice_0.22-6              listenv_0.9.1              
#>  [7] digest_0.6.36               evaluate_0.24.0            
#>  [9] grid_4.4.1                  fastmap_1.2.0              
#> [11] jsonlite_1.8.8              Matrix_1.7-0               
#> [13] SeuratObject_5.0.2          GenomeInfoDb_1.41.1        
#> [15] httr_1.4.7                  SingleCellExperiment_1.27.2
#> [17] spam_2.10-0                 UCSC.utils_1.1.0           
#> [19] codetools_0.2-20            jquerylib_0.1.4            
#> [21] abind_1.4-5                 cli_3.6.3                  
#> [23] rlang_1.1.4                 crayon_1.5.3               
#> [25] XVector_0.45.0              Biobase_2.65.0             
#> [27] parallelly_1.37.1           future.apply_1.11.2        
#> [29] cachem_1.1.0                DelayedArray_0.31.9        
#> [31] yaml_2.3.9                  S4Arrays_1.5.4             
#> [33] tools_4.4.1                 parallel_4.4.1             
#> [35] GenomeInfoDbData_1.2.12     SummarizedExperiment_1.35.1
#> [37] globals_0.16.3              BiocGenerics_0.51.0        
#> [39] R6_2.5.1                    matrixStats_1.3.0          
#> [41] stats4_4.4.1                lifecycle_1.0.4            
#> [43] zlibbioc_1.51.1             S4Vectors_0.43.2           
#> [45] IRanges_2.39.2              progressr_0.14.0           
#> [47] bslib_0.7.0                 data.table_1.15.4          
#> [49] Rcpp_1.0.13                 xfun_0.46                  
#> [51] GenomicRanges_1.57.1        MatrixGenerics_1.17.0      
#> [53] knitr_1.48                  htmltools_0.5.8.1          
#> [55] rmarkdown_2.27              dotCall64_1.1-1            
#> [57] compiler_4.4.1              sp_2.1-4