Rounding numeric values

Example data

In this example, we use the ?airway data set.

We briefly adjust the reference level of the treatment factor to the untreated condition.

library("airway")
data("airway")
airway$dex <- relevel(airway$dex, "untrt")

Differential expression

To generate some example results, we run a standard edgeR analysis using glmFit() and glmLRT().

The differential expression results are fetched using topTags().

library("edgeR")

design <- model.matrix(~ 0 + dex + cell, data = colData(airway))

fit <- glmFit(airway, design, dispersion = 0.1)
lrt <- glmLRT(fit, contrast = c(-1, 1, 0, 0, 0))
res_edger <- topTags(lrt, n = Inf)
head(res_edger)
#> Coefficient:  -1*dexuntrt 1*dextrt 
#>                         gene_id     gene_name entrezid         gene_biotype gene_seq_start
#> ENSG00000109906 ENSG00000109906        ZBTB16       NA       protein_coding      113930315
#> ENSG00000179593 ENSG00000179593       ALOX15B       NA       protein_coding        7942335
#> ENSG00000127954 ENSG00000127954        STEAP4       NA       protein_coding       87905744
#> ENSG00000152583 ENSG00000152583       SPARCL1       NA       protein_coding       88394487
#> ENSG00000250978 ENSG00000250978 RP11-357D18.1       NA processed_transcript       66759637
#> ENSG00000163884 ENSG00000163884         KLF15       NA       protein_coding      126061478
#>                 gene_seq_end seq_name seq_strand seq_coord_system        symbol     logFC   logCPM
#> ENSG00000109906    114121398       11          1               NA        ZBTB16  7.183385 4.132638
#> ENSG00000179593      7952452       17          1               NA       ALOX15B 10.015847 1.627629
#> ENSG00000127954     87936206        7         -1               NA        STEAP4  5.087069 3.672567
#> ENSG00000152583     88452213        4         -1               NA       SPARCL1  4.498698 5.510213
#> ENSG00000250978     66771420        5         -1               NA RP11-357D18.1  6.128131 1.377260
#> ENSG00000163884    126076285        3         -1               NA         KLF15  4.367962 4.681216
#>                       LR       PValue          FDR
#> ENSG00000109906 238.3947 8.805179e-54 5.606874e-49
#> ENSG00000179593 181.0331 2.883024e-41 9.179116e-37
#> ENSG00000127954 146.9725 7.957020e-34 1.688931e-29
#> ENSG00000152583 140.2205 2.382274e-32 3.792402e-28
#> ENSG00000250978 137.4681 9.526183e-32 1.213198e-27
#> ENSG00000163884 129.2203 6.069471e-30 6.441428e-26

Then, we embed this set of differential expression results in the airway object using the embedContrastResults() method.

The results embedded in the airway object can be accessed using the contrastResults() function.

library(iSEEde)
airway <- embedContrastResults(res_edger, airway, name = "edgeR")
contrastResults(airway)
#> DataFrame with 63677 rows and 1 column
#>                              edgeR
#>                 <iSEEedgeRResults>
#> ENSG00000000003 <iSEEedgeRResults>
#> ENSG00000000005 <iSEEedgeRResults>
#> ENSG00000000419 <iSEEedgeRResults>
#> ENSG00000000457 <iSEEedgeRResults>
#> ENSG00000000460 <iSEEedgeRResults>
#> ...                            ...
#> ENSG00000273489 <iSEEedgeRResults>
#> ENSG00000273490 <iSEEedgeRResults>
#> ENSG00000273491 <iSEEedgeRResults>
#> ENSG00000273492 <iSEEedgeRResults>
#> ENSG00000273493 <iSEEedgeRResults>
contrastResults(airway, "edgeR")
#> iSEEedgeRResults with 63677 rows and 5 columns
#>                      logFC    logCPM        LR    PValue       FDR
#>                  <numeric> <numeric> <numeric> <numeric> <numeric>
#> ENSG00000000003 -0.4628153   5.05930  2.018481  0.155394         1
#> ENSG00000000005  0.0000000  -3.45546  0.000000  1.000000         1
#> ENSG00000000419  0.1247724   4.60783  0.146545  0.701860         1
#> ENSG00000000457 -0.0445216   3.48326  0.018241  0.892565         1
#> ENSG00000000460 -0.1618126   1.48518  0.210342  0.646500         1
#> ...                    ...       ...       ...       ...       ...
#> ENSG00000273489    2.48209  -3.28549   3.02143  0.082171         1
#> ENSG00000273490    0.00000  -3.45546   0.00000  1.000000         1
#> ENSG00000273491    0.00000  -3.45546   0.00000  1.000000         1
#> ENSG00000273492   -1.24012  -3.36894   0.91097  0.339857         1
#> ENSG00000273493   -1.75243  -3.36862   1.57193  0.209928         1

Set a default rounding configuration

Differential expression methods generally return precise numeric values with several digits after the decimal point. This level of precision can be unnecessarily overwhelming and users may wish to round numeric values to a limited number of significant digits.

The builtin default configuration for rounding in iSEEde is RoundDigit = FALSE and SignifDigits = 3. In other words, numeric values are not rounded, and if users do activate the rounding functionality, numeric values are rounded to three significant digits.

Those defaults can be changed using the panelDefaults() function.

panelDefaults(RoundDigits = TRUE, SignifDigits = 2L)

With the default panel settings configured, we use the DETable() function to display the contrast results with rounded numeric values.

library(iSEE)
app <- iSEE(airway, initial = list(
  DETable(ContrastName="edgeR", HiddenColumns = c("logCPM", "LR"),
          PanelWidth = 12L)
))

if (interactive()) {
  shiny::runApp(app)
}

Configuring rounding in individual panels

The default rounding configuration can be overridden in individual panel configurations.

The slots RoundDigits and SignifDigits can be set directly in the individual calls to the DETable() constructor function.

In the example below, we add two tables, one rounding numeric values to the default value of two significant digits set above, the other rounding the same values to three significant digits.

library(iSEE)
app <- iSEE(airway, initial = list(
  DETable(ContrastName="edgeR", HiddenColumns = c("logCPM", "LR"),
          PanelWidth = 6L, RoundDigits = TRUE),
  DETable(ContrastName="edgeR", HiddenColumns = c("logCPM", "LR"),
          PanelWidth = 6L, RoundDigits = TRUE, SignifDigits = 3L)
))

if (interactive()) {
  shiny::runApp(app)
}

Reproducibility

The iSEEde package (Rue-Albrecht, 2024) was made possible thanks to:

This package was developed using biocthis.

Code for creating the vignette

## Create the vignette
library("rmarkdown")
system.time(render("rounding.Rmd", "BiocStyle::html_document"))

## Extract the R code
library("knitr")
knit("rounding.Rmd", tangle = TRUE)

Date the vignette was generated.

#> [1] "2024-11-03 19:22:09 UTC"

Wallclock time spent generating the vignette.

#> Time difference of 3.179 secs

R session information.

#> ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.4.1 (2024-06-14)
#>  os       Ubuntu 24.04.1 LTS
#>  system   x86_64, linux-gnu
#>  ui       X11
#>  language (EN)
#>  collate  C
#>  ctype    en_US.UTF-8
#>  tz       Etc/UTC
#>  date     2024-11-03
#>  pandoc   3.2.1 @ /usr/local/bin/ (via rmarkdown)
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
#>  package              * version  date (UTC) lib source
#>  abind                  1.4-8    2024-09-12 [2] RSPM (R 4.4.0)
#>  airway               * 1.26.0   2024-10-31 [2] Bioconductor 3.20 (R 4.4.1)
#>  AnnotationDbi        * 1.69.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  backports              1.5.0    2024-05-23 [2] RSPM (R 4.4.0)
#>  beachmat               2.23.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  bibtex                 0.5.1    2023-01-26 [2] RSPM (R 4.4.0)
#>  Biobase              * 2.67.0   2024-10-31 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  BiocGenerics         * 0.53.1   2024-10-31 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  BiocManager            1.30.25  2024-08-28 [2] RSPM (R 4.4.0)
#>  BiocParallel           1.41.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  BiocStyle            * 2.35.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  Biostrings             2.75.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  bit                    4.5.0    2024-09-20 [2] RSPM (R 4.4.0)
#>  bit64                  4.5.2    2024-09-22 [2] RSPM (R 4.4.0)
#>  blob                   1.2.4    2023-03-17 [2] RSPM (R 4.4.0)
#>  bslib                  0.8.0    2024-07-29 [2] RSPM (R 4.4.0)
#>  buildtools             1.0.0    2024-10-31 [3] local (/pkg)
#>  cachem                 1.1.0    2024-05-16 [2] RSPM (R 4.4.0)
#>  circlize               0.4.16   2024-02-20 [2] RSPM (R 4.4.0)
#>  cli                    3.6.3    2024-06-21 [2] RSPM (R 4.4.0)
#>  clue                   0.3-65   2023-09-23 [2] RSPM (R 4.4.0)
#>  cluster                2.1.6    2023-12-01 [2] RSPM (R 4.4.0)
#>  codetools              0.2-20   2024-03-31 [2] RSPM (R 4.4.0)
#>  colorspace             2.1-1    2024-07-26 [2] RSPM (R 4.4.0)
#>  colourpicker           1.3.0    2023-08-21 [2] RSPM (R 4.4.0)
#>  ComplexHeatmap         2.23.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  crayon                 1.5.3    2024-06-20 [2] RSPM (R 4.4.0)
#>  DBI                    1.2.3    2024-06-02 [2] RSPM (R 4.4.0)
#>  DelayedArray           0.33.1   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  DESeq2               * 1.47.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  digest                 0.6.37   2024-08-19 [2] RSPM (R 4.4.0)
#>  doParallel             1.0.17   2022-02-07 [2] RSPM (R 4.4.0)
#>  DT                     0.33     2024-04-04 [2] RSPM (R 4.4.0)
#>  edgeR                * 4.5.0    2024-10-31 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  evaluate               1.0.1    2024-10-10 [2] RSPM (R 4.4.0)
#>  fansi                  1.0.6    2023-12-08 [2] RSPM (R 4.4.0)
#>  fastmap                1.2.0    2024-05-15 [2] RSPM (R 4.4.0)
#>  fontawesome            0.5.2    2023-08-19 [2] RSPM (R 4.4.0)
#>  foreach                1.5.2    2022-02-02 [2] RSPM (R 4.4.0)
#>  generics             * 0.1.3    2022-07-05 [2] RSPM (R 4.4.0)
#>  GenomeInfoDb         * 1.43.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  GenomeInfoDbData       1.2.13   2024-11-03 [2] Bioconductor
#>  GenomicRanges        * 1.59.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  GetoptLong             1.0.5    2020-12-15 [2] RSPM (R 4.4.0)
#>  ggplot2                3.5.1    2024-04-23 [2] RSPM (R 4.4.0)
#>  ggrepel                0.9.6    2024-09-07 [2] RSPM (R 4.4.0)
#>  GlobalOptions          0.1.2    2020-06-10 [2] RSPM (R 4.4.0)
#>  glue                   1.8.0    2024-09-30 [2] RSPM (R 4.4.0)
#>  gtable                 0.3.6    2024-10-25 [2] RSPM (R 4.4.0)
#>  highr                  0.11     2024-05-26 [2] RSPM (R 4.4.0)
#>  htmltools              0.5.8.1  2024-04-04 [2] RSPM (R 4.4.0)
#>  htmlwidgets            1.6.4    2023-12-06 [2] RSPM (R 4.4.0)
#>  httpuv                 1.6.15   2024-03-26 [2] RSPM (R 4.4.0)
#>  httr                   1.4.7    2023-08-15 [2] RSPM (R 4.4.0)
#>  igraph                 2.1.1    2024-10-19 [2] RSPM (R 4.4.0)
#>  IRanges              * 2.41.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  iSEE                 * 2.19.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  iSEEde               * 1.5.0    2024-11-03 [1] https://bioc.r-universe.dev (R 4.4.1)
#>  iterators              1.0.14   2022-02-05 [2] RSPM (R 4.4.0)
#>  jquerylib              0.1.4    2021-04-26 [2] RSPM (R 4.4.0)
#>  jsonlite               1.8.9    2024-09-20 [2] RSPM (R 4.4.0)
#>  KEGGREST               1.47.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  knitr                  1.48     2024-07-07 [2] RSPM (R 4.4.0)
#>  later                  1.3.2    2023-12-06 [2] RSPM (R 4.4.0)
#>  lattice                0.22-6   2024-03-20 [2] RSPM (R 4.4.0)
#>  lifecycle              1.0.4    2023-11-07 [2] RSPM (R 4.4.0)
#>  limma                * 3.63.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  listviewer             4.0.0    2023-09-30 [2] RSPM (R 4.4.0)
#>  locfit                 1.5-9.10 2024-06-24 [2] RSPM (R 4.4.0)
#>  lubridate              1.9.3    2023-09-27 [2] RSPM (R 4.4.0)
#>  magrittr               2.0.3    2022-03-30 [2] RSPM (R 4.4.0)
#>  maketools              1.3.1    2024-10-31 [3] Github (jeroen/maketools@d46f92c)
#>  Matrix                 1.7-1    2024-10-18 [2] RSPM (R 4.4.0)
#>  MatrixGenerics       * 1.19.0   2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  matrixStats          * 1.4.1    2024-09-08 [2] RSPM (R 4.4.0)
#>  memoise                2.0.1    2021-11-26 [2] RSPM (R 4.4.0)
#>  mgcv                   1.9-1    2023-12-21 [2] RSPM (R 4.4.0)
#>  mime                   0.12     2021-09-28 [2] RSPM (R 4.4.0)
#>  miniUI                 0.1.1.1  2018-05-18 [2] RSPM (R 4.4.0)
#>  munsell                0.5.1    2024-04-01 [2] RSPM (R 4.4.0)
#>  nlme                   3.1-166  2024-08-14 [2] RSPM (R 4.4.0)
#>  org.Hs.eg.db         * 3.20.0   2024-11-03 [2] Bioconductor
#>  pillar                 1.9.0    2023-03-22 [2] RSPM (R 4.4.0)
#>  pkgconfig              2.0.3    2019-09-22 [2] RSPM (R 4.4.0)
#>  plyr                   1.8.9    2023-10-02 [2] RSPM (R 4.4.0)
#>  png                    0.1-8    2022-11-29 [2] RSPM (R 4.4.0)
#>  promises               1.3.0    2024-04-05 [2] RSPM (R 4.4.0)
#>  R6                     2.5.1    2021-08-19 [2] RSPM (R 4.4.0)
#>  RColorBrewer           1.1-3    2022-04-03 [2] RSPM (R 4.4.0)
#>  Rcpp                   1.0.13-1 2024-11-02 [2] CRAN (R 4.4.1)
#>  RefManageR           * 1.4.0    2022-09-30 [2] RSPM (R 4.4.0)
#>  rintrojs               0.3.4    2024-01-11 [2] RSPM (R 4.4.0)
#>  rjson                  0.2.23   2024-09-16 [2] RSPM (R 4.4.0)
#>  rlang                  1.1.4    2024-06-04 [2] RSPM (R 4.4.0)
#>  rmarkdown              2.28     2024-08-17 [2] RSPM (R 4.4.0)
#>  RSQLite                2.3.7    2024-05-27 [2] RSPM (R 4.4.0)
#>  S4Arrays               1.7.1    2024-10-31 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  S4Vectors            * 0.45.0   2024-10-31 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  sass                   0.4.9    2024-03-15 [2] RSPM (R 4.4.0)
#>  scales                 1.3.0    2023-11-28 [2] RSPM (R 4.4.0)
#>  scuttle              * 1.17.0   2024-10-31 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  sessioninfo          * 1.2.2    2021-12-06 [2] RSPM (R 4.4.0)
#>  shape                  1.4.6.1  2024-02-23 [2] RSPM (R 4.4.0)
#>  shiny                  1.9.1    2024-08-01 [2] RSPM (R 4.4.0)
#>  shinyAce               0.4.3    2024-10-19 [2] RSPM (R 4.4.0)
#>  shinydashboard         0.7.2    2021-09-30 [2] RSPM (R 4.4.0)
#>  shinyjs                2.1.0    2021-12-23 [2] RSPM (R 4.4.0)
#>  shinyWidgets           0.8.7    2024-09-23 [2] RSPM (R 4.4.0)
#>  SingleCellExperiment * 1.29.0   2024-10-31 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  SparseArray            1.7.0    2024-10-31 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  statmod                1.5.0    2023-01-06 [2] RSPM (R 4.4.0)
#>  stringi                1.8.4    2024-05-06 [2] RSPM (R 4.4.0)
#>  stringr                1.5.1    2023-11-14 [2] RSPM (R 4.4.0)
#>  SummarizedExperiment * 1.37.0   2024-10-31 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  sys                    3.4.3    2024-10-04 [2] RSPM (R 4.4.0)
#>  tibble                 3.2.1    2023-03-20 [2] RSPM (R 4.4.0)
#>  timechange             0.3.0    2024-01-18 [2] RSPM (R 4.4.0)
#>  UCSC.utils             1.3.0    2024-10-31 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  utf8                   1.2.4    2023-10-22 [2] RSPM (R 4.4.0)
#>  vctrs                  0.6.5    2023-12-01 [2] RSPM (R 4.4.0)
#>  vipor                  0.4.7    2023-12-18 [2] RSPM (R 4.4.0)
#>  viridisLite            0.4.2    2023-05-02 [2] RSPM (R 4.4.0)
#>  xfun                   0.49     2024-10-31 [2] RSPM (R 4.4.0)
#>  xml2                   1.3.6    2023-12-04 [2] RSPM (R 4.4.0)
#>  xtable                 1.8-4    2019-04-21 [2] RSPM (R 4.4.0)
#>  XVector                0.47.0   2024-10-31 [2] https://bioc.r-universe.dev (R 4.4.1)
#>  yaml                   2.3.10   2024-07-26 [2] RSPM (R 4.4.0)
#>  zlibbioc               1.52.0   2024-10-29 [2] Bioconductor 3.20 (R 4.4.1)
#> 
#>  [1] /tmp/RtmpBFnQTo/Rinst1f142cdf1439
#>  [2] /github/workspace/pkglib
#>  [3] /usr/local/lib/R/site-library
#>  [4] /usr/lib/R/site-library
#>  [5] /usr/lib/R/library
#> 
#> ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Bibliography

This vignette was generated using BiocStyle r Citep(bib[["BiocStyle"]]) with knitr (Xie, 2024) and rmarkdown (Allaire, Xie, Dervieux et al., 2024) running behind the scenes.

Citations made with RefManageR (McLean, 2017).

[1] J. Allaire, Y. Xie, C. Dervieux, et al. rmarkdown: Dynamic Documents for R. R package version 2.28. 2024. URL: https://github.com/rstudio/rmarkdown.

[2] M. W. McLean. “RefManageR: Import and Manage BibTeX and BibLaTeX References in R”. In: The Journal of Open Source Software (2017). DOI: 10.21105/joss.00338.

[3] A. Oleś. BiocStyle: Standard styles for vignettes and other Bioconductor documents. R package version 2.35.0. 2024. URL: https://github.com/Bioconductor/BiocStyle.

[4] R Core Team. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. Vienna, Austria, 2024. URL: https://www.R-project.org/.

[5] K. Rue-Albrecht. iSEEde: iSEE extension for panels related to differential expression analysis. R package version 1.5.0. 2024. URL: https://github.com/iSEE/iSEEde.

[6] H. Wickham. “testthat: Get Started with Testing”. In: The R Journal 3 (2011), pp. 5–10. URL: https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Wickham.pdf.

[7] H. Wickham, W. Chang, R. Flight, et al. sessioninfo: R Session Information. R package version 1.2.2, https://r-lib.github.io/sessioninfo/. 2021. URL: https://github.com/r-lib/sessioninfo#readme.

[8] Y. Xie. knitr: A General-Purpose Package for Dynamic Report Generation in R. R package version 1.48. 2024. URL: https://yihui.org/knitr/.