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
.
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
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)
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