LTLA / scuttle

Clone of the Bioconductor repository for the scuttle package.
https://bioconductor.org/packages/devel/bioc/html/scuttle.html
9 stars 7 forks source link

What should the minimum colSums(counts) be for overcoming rescaling = 0 results? #7

Closed lcolladotor closed 3 years ago

lcolladotor commented 3 years ago

Hi Aaron,

We (@bpardo99 & @abspangler13) have an SCE object from Visium data that has some low colSums(counts) that we are trying to process with code similar to the one from https://github.com/LieberInstitute/HumanPilot/blob/master/Analysis/sce_scran.R#L82-L96 that was used for generating http://spatial.libd.org/spatialLIBD/.

Given that quickCluster() takes a bit to run, we initially ran it with the spots (equivalent to cells; aka cols in the SCE) that had colSums(counts) > 0 to avoid the error prompted by https://github.com/LTLA/scuttle/blob/b1cb2949bab45ec698ab426b464cd8f6306f0ef1/R/pooledSizeFactors.R#L321. However, some have colSums(counts) <= 10 for example, so maybe we need a stricter filter.

In any case, when running computeSumFactors() we are running into https://github.com/LTLA/scuttle/blob/b1cb2949bab45ec698ab426b464cd8f6306f0ef1/R/pooledSizeFactors.R#L435.

Here's the basic structure of our code.

sce$sum_umi <- colSums(counts(sce))
sce_nonzero<-sce[,sce$sum_umi>0]
clusters <- quickCluster(
  sce_nonzero,
  BPPARAM = MulticoreParam(4),
  block = sce_nonzero$sample_name,
  block.BPPARAM = MulticoreParam(4)
)
sce_test <-
  computeSumFactors(sce_nonzero, clusters = clusters, BPPARAM = MulticoreParam(4))

We then tried subsetting the data to colSums(counts) > 10 and 100 without re-running quickCluster() and got the same error (we'll try re-running quickCluster() after filtering for colSums(counts) > 10 but it might not work either; aka, the quick clusters assignments might remain the same ones).

sce_test <-
  computeSumFactors(sce_nonzero[,sce_nonzero$sum_umi>10], clusters = clusters[sce_nonzero$sum_umi>10], BPPARAM = MulticoreParam(4))

## Same error
## however, here 2 clusters end up with 0 spots given the sum_umi > 100 filter
sce_test <-
  computeSumFactors(sce_nonzero[,sce_nonzero$sum_umi>100], clusters = clusters[sce_nonzero$sum_umi>100], BPPARAM = MulticoreParam(4))

With >10 and using options(error = recover) from https://rstats.wtf/debugging-r-code.html#debugging-others-code we saw that we have 95 clusters and only cluster 89 (that has 272 spots) has rescaling == 0 as checked in https://github.com/LTLA/scuttle/blob/b1cb2949bab45ec698ab426b464cd8f6306f0ef1/R/pooledSizeFactors.R#L434.

At that point we have min.mean = 0.1 and 4 entries with ref.prof equal to 0. I'm struggling here to see the relationship between the low counts and the rescaling = 0 with quick cluster 89.

Browse[3]> summary((cur.prof/cur.libsize + ref.prof/ref.libsize)/2 * (cur.libsize + ref.libsize)/2)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.
 0.00000  0.00000  0.00036  0.06753  0.01736 54.46741
Browse[3]> to.use <- (cur.prof/cur.libsize + ref.prof/ref.libsize)/2 * (cur.libsize + ref.libsize)/2 >= min.mean
Browse[3]> table(to.use)
to.use
FALSE  TRUE
33549  3052
Browse[3]> all(to.use)
[1] FALSE
Browse[3]> cur.prof <- cur.prof[to.use]
Browse[3]>             ref.prof <- ref.prof[to.use]
Browse[3]> median(cur.prof/ref.prof, na.rm=TRUE)
[1] 0
Browse[3]> summary(cur.prof/ref.prof, na.rm=TRUE)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
0.00000 0.00000 0.00000     Inf 0.01363     Inf
Browse[3]> summary(ref.prof)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
 0.0000  0.4452  0.6439  1.1897  1.1538 57.0261
Browse[3]> table(ref.prof==0)
FALSE  TRUE
 3048     4
Browse[3]>

Note that everything does work if we use quickPerCellQC() to find spots (cells) to discard similar to https://github.com/LieberInstitute/HumanPilot/blob/master/Analysis/sce_scran.R#L32-L33 and https://github.com/LieberInstitute/HumanPilot/blob/master/Analysis/sce_scran.R#L61. However, that leads to dropping spots (cells) that are biologically relevant (layer-specific in the DLPFC). These "discard" spots end up having a colSums(counts) as high as 493.

> summary(sce$sum_umi[sce$scran_discard=="TRUE"])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
      0      33     138     142     230     493

So well, do you have some advice on what the minimum colSums(counts) should be?

Best, Leo

> packageVersion("scran")
[1] '1.18.3'
> packageVersion("scuttle")
[1] '1.0.4'
LTLA commented 3 years ago

If you've gotten to the point of debugging the function, it should be pretty clear that your zero rescaling factor is being caused by the presence of >50% zero counts in cur.prof, which in turn must be caused by the low counts for cluster 89. It is very unusual for the rescaling factor to be zero. In fact, it is so unusual that I have never seen that error triggered on real data. It means that more than 50% of the average expression values in a cluster are zero - even after filtering on min.mean!

The typical solution is to filter out the problematic cells. The 493 figure, by itself, is not necessarily relevant as quickPerCellQC() uses other metrics; you may observe that the true reason for filtering is that of the number of features or the mitochondrial proportions. And also, 493 is hardly "high"; that's already a rather relaxed QC threshold in 10X scRNA-seq contexts. Just because they're biologically relevant doesn't necessarily mean that the data is any good for those layers.

If you must retain these spots, I'm not sure any "sensible" normalization to remove composition bias can be done here. The whole rationale about removing composition bias is based on the concept of most genes being non-DE, but when most genes have zero counts... there's not really all that much that can be done. I guess I could fall back to using mean(cur.prof)/mean(ref.prof), which represents the ratio of effective library sizes, but this may or may not be sensible.

lcolladotor commented 3 years ago

Hi Aaron,

Thanks a lot for your reply! We are still parsing the information you provided us and I wanted to update you on our efforts. Overall, we'll try to understand more & discuss with our colleagues the implications of using mean(cur.prof)/mean(ref.prof) as a fallback for cluster 89 in situations like ours.

We also want to:

Today I tried explaining to Abby and Brenda chapter 7.3 from the OSCA book http://bioconductor.org/books/release/OSCA/normalization.html#normalization-by-deconvolution. It might be good to check in more detail http://bioconductor.org/books/release/OSCA/normalization.html#ref-lun2016pooling and http://bioconductor.org/books/release/OSCA/normalization.html#ref-robinson2010scaling.

Best, Leo

LTLA commented 3 years ago

scuttle 1.1.15 uses the fallback I described above, so you'll at least get something back for cluster 89.

lcolladotor commented 3 years ago

Hi Aaron,

Thank you for implementing the changes in https://github.com/LTLA/scuttle/commit/0ed602b33c839b9cad770d5871b7436ebe993caf. With this new version we get a rescaling value for this problematic cluster. Unlike what we were seeing before, with #8, we can see that the quick cluster that triggers this warning (formerly error) is actually bad on metrics such as low number of features and counts. So it makes complete sense now. Before we were not understanding why a potentially ok quick cluster would trigger the warning / error.

We've also inspected the spaceranger metrics and compared to other samples we have, the sample where this problematic cluster is located at, has half the mean reads per spot as the next lowest one: 25k vs 50k (50k is the value recommended by 10x Genomics). That is, generating more sequencing data will likely resolve this. And if not, we'll have to either discard these spots (and see if we can find a better threshold to remove as few spots as possible) or check if we can get fewer quick clusters (we have 95) so there'll be less sparsity after pseudo-bulking than currently observed (maybe changing the block argument in quickCluster() will help).

That is, we'll attempt to solve the problem with new data instead of any statistics / code.

Thanks for everything Aaron!

Best, Leo

Details

rescaling.factors <- scuttle:::.rescale_clusters(clust.profile, ref.col=ref.clust, min.mean=min.mean)
# Warning message:
# In scuttle:::.rescale_clusters(clust.profile, ref.col = ref.clust,  :
#   inter-cluster rescaling factor for cluster 64 is not strictly positive,
# reverting to the ratio of average library sizes

As noted in #8, internal cluster 64 is actually the original cluster 85. (We originally had internal cluster 89 previously when we filtered to spots with at least 11 counts; though likely internal cluster 89 might have matched the original cluster 85 since 89 also has decent quickPerCellQC metrics).

## Original cluster 89
# scran_low_lib_size scran_low_n_features scran_high_subsets_Mito_percent
# TRUE : 62          TRUE : 86            TRUE :  2
# FALSE:210          FALSE:186            FALSE:270
# scran_discard
# TRUE : 87
# FALSE:185

## Original cluster 64
# scran_low_lib_size scran_low_n_features scran_high_subsets_Mito_percent
# TRUE :  0          TRUE :  0            TRUE : 56
# FALSE:542          FALSE:542            FALSE:486
# scran_discard
# TRUE : 56
# FALSE:486

## Original cluster 85 (the bad one!) which gets assigned cluster 64 internally
## OK! Finally this cluster does look bad! I mean, it was weird the previous clusters didn't seem bad before!
# scran_low_lib_size scran_low_n_features scran_high_subsets_Mito_percent scran_discard
#  TRUE :159          TRUE :159            TRUE : 55                       TRUE :159
#  FALSE:  0          FALSE:  0            FALSE:104                       FALSE:  0

For internal cluster 64 (original 85) we end up with the following rescaling value.

# > rescale.sf
# [1] 0

## Since it's 0, that triggers the warning (formerly error)
## https://github.com/LTLA/scuttle/blob/3cb28efbf237ecb9b7a1973ab7e8957371260a32/R/pooledSizeFactors.R#L412-L442
## See https://github.com/LTLA/scuttle/commit/0ed602b33c839b9cad770d5871b7436ebe993caf
## for changes
if (!is.finite(rescale.sf) || rescale.sf <= 0) {
    warning(paste(strwrap(paste0("inter-cluster rescaling factor for cluster ", clust,
        " is not strictly positive, reverting to the ratio of average library sizes")), collapse="\n"))
    rescale.sf <- sum(cur.prof)/sum(ref.prof)
    # > rescale.sf
    # [1] 0.003733694
    # > sum(cur.prof)
    # [1] 13.62893
    # > sum(ref.prof)
    # [1] 3650.254
}

# > summary(cur.prof)
#     Min.  1st Qu.   Median     Mean  3rd Qu.     Max.
# 0.000000 0.000000 0.000000 0.004306 0.004082 0.552340
# > summary(ref.prof)
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
#  0.0000  0.4312  0.6260  1.1533  1.1144 57.0261
# > length(cur.prof)
# [1] 3165
# > length(ref.prof)
# [1] 3165
# > addmargins(table(cur.prof == 0))
#
# FALSE  TRUE   Sum
#  1431  1734  3165
#  > addmargins(table(ref.prof == 0))
#
# FALSE  TRUE   Sum
#  3159     6  3165
save(all.norm, clusters, cur.prof, ref.prof, min.mean, file = here::here("rdata", "inspect_scuttle_issue_7.Rdata"))

Here's the inspect_scuttle_issue7.Rdata file (22 Mb) where clusters are the internal clusters (so look for 64 in this case, not 85).

R session info

```R ─ Session info ─────────────────────────────────────────────────────────────────────────────────────────────────────── setting value version R Under development (unstable) (2021-02-17 r80017) os CentOS Linux 7 (Core) system x86_64, linux-gnu ui X11 language (EN) collate en_US.UTF-8 ctype en_US.UTF-8 tz US/Eastern date 2021-02-17 ─ Packages ─────────────────────────────────────────────────────────────────────────────────────────────────────────── package * version date lib source AnnotationDbi 1.53.1 2021-02-04 [2] Bioconductor AnnotationHub 2.23.2 2021-02-05 [2] Bioconductor assertthat 0.2.1 2019-03-21 [2] CRAN (R 4.1.0) attempt 0.3.1 2020-05-03 [1] CRAN (R 4.1.0) beachmat 2.7.6 2021-01-15 [2] Bioconductor beeswarm 0.2.3 2016-04-25 [1] CRAN (R 4.1.0) benchmarkme 1.0.5 2021-02-09 [1] CRAN (R 4.1.0) benchmarkmeData 1.0.4 2020-04-23 [1] CRAN (R 4.1.0) Biobase * 2.51.0 2020-10-27 [2] Bioconductor BiocFileCache 1.15.1 2020-11-09 [2] Bioconductor BiocGenerics * 0.37.1 2021-02-04 [2] Bioconductor BiocIO 1.1.2 2020-12-05 [2] Bioconductor BiocManager 1.30.10 2019-11-16 [2] CRAN (R 4.1.0) BiocNeighbors 1.9.4 2020-12-17 [1] Bioconductor BiocParallel * 1.25.4 2021-02-04 [2] Bioconductor BiocSingular 1.7.2 2021-01-23 [1] Bioconductor BiocVersion 3.13.1 2020-10-27 [2] Bioconductor Biostrings 2.59.2 2020-12-18 [2] Bioconductor bit 4.0.4 2020-08-04 [2] CRAN (R 4.1.0) bit64 4.0.5 2020-08-30 [2] CRAN (R 4.1.0) bitops 1.0-6 2013-08-17 [2] CRAN (R 4.1.0) blob 1.2.1 2020-01-20 [2] CRAN (R 4.1.0) bluster 1.1.5 2021-01-14 [1] Bioconductor cachem 1.0.4 2021-02-13 [2] CRAN (R 4.1.0) cli 2.3.0 2021-01-31 [2] CRAN (R 4.1.0) codetools 0.2-18 2020-11-04 [3] CRAN (R 4.1.0) colorout 1.2-2 2021-02-11 [1] Github (jalvesaq/colorout@726d681) colorspace 2.0-0 2020-11-11 [2] CRAN (R 4.1.0) config 0.3.1 2020-12-17 [1] CRAN (R 4.1.0) cowplot 1.1.1 2020-12-30 [1] CRAN (R 4.1.0) crayon 1.4.1 2021-02-08 [2] CRAN (R 4.1.0) curl 4.3 2019-12-02 [2] CRAN (R 4.1.0) data.table 1.13.6 2020-12-30 [2] CRAN (R 4.1.0) DBI 1.1.1 2021-01-15 [2] CRAN (R 4.1.0) dbplyr 2.1.0 2021-02-03 [2] CRAN (R 4.1.0) DelayedArray 0.17.7 2020-12-26 [2] Bioconductor DelayedMatrixStats 1.13.5 2021-02-04 [2] Bioconductor desc 1.2.0 2018-05-01 [2] CRAN (R 4.1.0) digest 0.6.27 2020-10-24 [2] CRAN (R 4.1.0) dockerfiler 0.1.3 2019-03-19 [1] CRAN (R 4.1.0) doParallel 1.0.16 2020-10-16 [2] CRAN (R 4.1.0) dotCall64 1.0-1 2021-02-11 [1] CRAN (R 4.1.0) dplyr 1.0.4 2021-02-02 [2] CRAN (R 4.1.0) dqrng 0.2.1 2019-05-17 [1] CRAN (R 4.1.0) DropletUtils 1.11.10 2021-02-04 [1] Bioconductor DT 0.17 2021-01-06 [2] CRAN (R 4.1.0) edgeR 3.33.1 2021-01-11 [2] Bioconductor ellipsis 0.3.1 2020-05-15 [2] CRAN (R 4.1.0) ExperimentHub 1.17.1 2021-02-08 [2] Bioconductor fastmap 1.1.0 2021-01-25 [2] CRAN (R 4.1.0) fields 11.6 2020-10-09 [2] CRAN (R 4.1.0) filelock 1.0.2 2018-10-05 [2] CRAN (R 4.1.0) foreach 1.5.1 2020-10-15 [2] CRAN (R 4.1.0) fs 1.5.0 2020-07-31 [2] CRAN (R 4.1.0) generics 0.1.0 2020-10-31 [2] CRAN (R 4.1.0) GenomeInfoDb * 1.27.6 2021-02-04 [2] Bioconductor GenomeInfoDbData 1.2.4 2020-11-03 [2] Bioconductor GenomicAlignments 1.27.2 2020-12-12 [2] Bioconductor GenomicRanges * 1.43.3 2021-01-14 [2] Bioconductor ggbeeswarm 0.6.0 2017-08-07 [1] CRAN (R 4.1.0) ggplot2 * 3.3.3 2020-12-30 [2] CRAN (R 4.1.0) glue 1.4.2 2020-08-27 [2] CRAN (R 4.1.0) golem 0.2.1 2020-03-05 [1] CRAN (R 4.1.0) gridExtra 2.3 2017-09-09 [2] CRAN (R 4.1.0) gtable 0.3.0 2019-03-25 [2] CRAN (R 4.1.0) HDF5Array 1.19.4 2021-02-14 [2] Bioconductor here * 1.0.1 2020-12-13 [1] CRAN (R 4.1.0) htmltools 0.5.1.1 2021-01-22 [2] CRAN (R 4.1.0) htmlwidgets 1.5.3 2020-12-10 [2] CRAN (R 4.1.0) httpuv 1.5.5 2021-01-13 [2] CRAN (R 4.1.0) httr 1.4.2 2020-07-20 [2] CRAN (R 4.1.0) igraph 1.2.6 2020-10-06 [2] CRAN (R 4.1.0) interactiveDisplayBase 1.29.0 2020-10-27 [2] Bioconductor IRanges * 2.25.6 2020-12-18 [2] Bioconductor irlba 2.3.3 2019-02-05 [2] CRAN (R 4.1.0) iterators 1.0.13 2020-10-15 [2] CRAN (R 4.1.0) jsonlite 1.7.2 2020-12-09 [2] CRAN (R 4.1.0) KEGGREST 1.31.1 2020-11-23 [2] Bioconductor knitr 1.31 2021-01-27 [2] CRAN (R 4.1.0) later 1.1.0.1 2020-06-05 [2] CRAN (R 4.1.0) lattice 0.20-41 2020-04-02 [3] CRAN (R 4.1.0) lazyeval 0.2.2 2019-03-15 [2] CRAN (R 4.1.0) lifecycle 1.0.0 2021-02-15 [2] CRAN (R 4.1.0) limma 3.47.7 2021-02-15 [2] Bioconductor locfit 1.5-9.4 2020-03-25 [2] CRAN (R 4.1.0) magick 2.6.0 2021-01-13 [2] CRAN (R 4.1.0) magrittr 2.0.1 2020-11-17 [2] CRAN (R 4.1.0) maps 3.3.0 2018-04-03 [2] CRAN (R 4.1.0) Matrix * 1.3-2 2021-01-06 [3] CRAN (R 4.1.0) MatrixGenerics * 1.3.1 2021-02-01 [2] Bioconductor matrixStats * 0.58.0 2021-01-29 [2] CRAN (R 4.1.0) memoise 2.0.0 2021-01-26 [2] CRAN (R 4.1.0) metapod 0.99.5 2020-12-14 [1] Bioconductor mime 0.10 2021-02-13 [2] CRAN (R 4.1.0) munsell 0.5.0 2018-06-12 [2] CRAN (R 4.1.0) pillar 1.4.7 2020-11-20 [2] CRAN (R 4.1.0) pkgconfig 2.0.3 2019-09-22 [2] CRAN (R 4.1.0) pkgload 1.1.0 2020-05-29 [2] CRAN (R 4.1.0) plotly 4.9.3 2021-01-10 [2] CRAN (R 4.1.0) png 0.1-7 2013-12-03 [2] CRAN (R 4.1.0) Polychrome 1.2.6 2020-11-11 [1] CRAN (R 4.1.0) promises 1.2.0.1 2021-02-11 [1] CRAN (R 4.1.0) pryr * 0.1.4 2018-02-18 [2] CRAN (R 4.1.0) purrr 0.3.4 2020-04-17 [2] CRAN (R 4.1.0) R.methodsS3 1.8.1 2020-08-26 [2] CRAN (R 4.1.0) R.oo 1.24.0 2020-08-26 [2] CRAN (R 4.1.0) R.utils 2.10.1 2020-08-26 [2] CRAN (R 4.1.0) R6 2.5.0 2020-10-28 [2] CRAN (R 4.1.0) rappdirs 0.3.3 2021-01-31 [2] CRAN (R 4.1.0) RColorBrewer 1.1-2 2014-12-07 [2] CRAN (R 4.1.0) Rcpp 1.0.6 2021-01-15 [2] CRAN (R 4.1.0) RCurl 1.98-1.2 2020-04-18 [2] CRAN (R 4.1.0) remotes 2.2.0 2020-07-21 [2] CRAN (R 4.1.0) restfulr 0.0.13 2017-08-06 [2] CRAN (R 4.1.0) rhdf5 2.35.0 2020-10-27 [2] Bioconductor rhdf5filters 1.3.3 2020-12-07 [2] Bioconductor Rhdf5lib 1.13.0 2020-10-27 [2] Bioconductor rjson 0.2.20 2018-06-08 [2] CRAN (R 4.1.0) rlang 0.4.10 2020-12-30 [2] CRAN (R 4.1.0) roxygen2 7.1.1 2020-06-27 [2] CRAN (R 4.1.0) rprojroot 2.0.2 2020-11-15 [2] CRAN (R 4.1.0) Rsamtools 2.7.1 2021-01-18 [2] Bioconductor RSQLite 2.2.3 2021-01-24 [2] CRAN (R 4.1.0) rstudioapi 0.13 2020-11-12 [2] CRAN (R 4.1.0) rsvd 1.0.3 2020-02-17 [1] CRAN (R 4.1.0) rtracklayer * 1.51.4 2021-01-14 [2] Bioconductor S4Vectors * 0.29.7 2021-02-04 [2] Bioconductor ScaledMatrix 0.99.2 2021-01-14 [1] Bioconductor scales 1.1.1 2020-05-11 [2] CRAN (R 4.1.0) scater * 1.19.9 2021-02-01 [1] Bioconductor scatterplot3d 0.3-41 2018-03-14 [1] CRAN (R 4.1.0) scran * 1.19.13 2021-02-13 [1] Bioconductor scuttle * 1.1.15 2021-02-14 [1] Bioconductor sessioninfo * 1.1.1 2018-11-05 [2] CRAN (R 4.1.0) shiny 1.6.0 2021-01-25 [2] CRAN (R 4.1.0) shinyWidgets 0.5.7 2021-02-03 [1] CRAN (R 4.1.0) SingleCellExperiment * 1.13.10 2021-02-10 [1] Bioconductor spam 2.6-0 2020-12-14 [2] CRAN (R 4.1.0) sparseMatrixStats 1.3.6 2021-02-04 [2] Bioconductor SpatialExperiment * 1.1.432 2021-02-17 [1] Github (drighelli/SpatialExperiment@8407ee8) spatialLIBD * 1.3.5 2021-02-17 [1] Github (LieberInstitute/spatialLIBD@3fbc875) statmod 1.4.35 2020-10-19 [2] CRAN (R 4.1.0) stringi 1.5.3 2020-09-09 [2] CRAN (R 4.1.0) stringr 1.4.0 2019-02-10 [2] CRAN (R 4.1.0) SummarizedExperiment * 1.21.1 2020-12-12 [2] Bioconductor testthat 3.0.2 2021-02-14 [2] CRAN (R 4.1.0) tibble 3.0.6 2021-01-29 [2] CRAN (R 4.1.0) tidyr 1.1.2 2020-08-27 [2] CRAN (R 4.1.0) tidyselect 1.1.0 2020-05-11 [2] CRAN (R 4.1.0) usethis 2.0.1 2021-02-10 [2] CRAN (R 4.1.0) uwot * 0.1.10 2020-12-15 [1] CRAN (R 4.1.0) vctrs 0.3.6 2020-12-17 [2] CRAN (R 4.1.0) vipor 0.4.5 2017-03-22 [1] CRAN (R 4.1.0) viridis 0.5.1 2018-03-29 [2] CRAN (R 4.1.0) viridisLite 0.3.0 2018-02-01 [2] CRAN (R 4.1.0) withr 2.4.1 2021-01-26 [2] CRAN (R 4.1.0) xfun 0.21 2021-02-10 [2] CRAN (R 4.1.0) XML 3.99-0.5 2020-07-23 [2] CRAN (R 4.1.0) xml2 1.3.2 2020-04-23 [2] CRAN (R 4.1.0) xtable 1.8-4 2019-04-21 [2] CRAN (R 4.1.0) XVector 0.31.1 2020-12-12 [2] Bioconductor yaml 2.2.1 2020-02-01 [2] CRAN (R 4.1.0) zlibbioc 1.37.0 2020-10-27 [2] Bioconductor [1] /users/lcollado/R/devel [2] /jhpce/shared/jhpce/core/conda/miniconda3-4.6.14/envs/svnR-devel/R/devel/lib64/R/site-library [3] /jhpce/shared/jhpce/core/conda/miniconda3-4.6.14/envs/svnR-devel/R/devel/lib64/R/library ```