The BiocBaseUtils
package provides a suite of helper functions
designed to help developers. Currently, it covers three topics often
encountered during the development process.
- Assertions - Type checks for logical, character, and numeric inputs
- Slot replacement - Replacing the value of object slots
show
method - Limiting the output of internal components of a class
Install the package directly from Bioconductor:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("BiocBaseUtils")
library(BiocBaseUtils)
We provide a number of functions that helps the developer establish the
type of class of a particular object. These include integer
,
numeric
, character
, and logical
; types often used in R /
Bioconductor.
isTRUEorFALSE(TRUE)
#> [1] TRUE
isTRUEorFALSE(FALSE)
#> [1] TRUE
isTRUEorFALSE(NA, na.ok = TRUE)
#> [1] TRUE
isScalarCharacter(LETTERS)
#> [1] FALSE
isScalarCharacter("L")
#> [1] TRUE
isCharacter(LETTERS)
#> [1] TRUE
isCharacter(NA_character_, na.ok = TRUE)
#> [1] TRUE
isZeroOneCharacter("")
#> [1] FALSE
isZeroOneCharacter("", zchar = TRUE)
#> [1] TRUE
isScalarInteger(1L)
#> [1] TRUE
isScalarInteger(1)
#> [1] FALSE
isScalarNumber(1)
#> [1] TRUE
isScalarNumber(1:2)
#> [1] FALSE
This function is often used in packages that establish formal S4
classes. When updating the value of a slot, one often uses the
setSlots
function.
setClass("A", representation = representation(slot1 = "numeric"))
aclass <- new("A", slot1 = 1:10)
aclass
#> An object of class "A"
#> Slot "slot1":
#> [1] 1 2 3 4 5 6 7 8 9 10
Now we use the setSlots
function to update the values in the object.
aclass <- setSlots(aclass, slot1 = 11:20)
aclass
#> An object of class "A"
#> Slot "slot1":
#> [1] 11 12 13 14 15 16 17 18 19 20
Note that setSlots
provides the same functionality as
BiocGenerics:::replaceSlots
but is more consistent with Bioconductor
the setter and getter language.
The selectSome
function allows the developer to display a limited
amount of information from a developed class. Note that the use of the
@
here is due to the minimal implementation in the examples provided.
The developer should always provide an interface to access the internal
components of the class via an ‘accessor’ function.
setMethod("show", signature = "A", function(object) {
s1info <- getElement(object, "slot1")
cat("A sequence:", selectSome(s1info))
})
aclass
#> A sequence: 11 12 ... 19 20
BiocBaseUtils
is a work in progress and we welcome contributions.
There are quite a few often-used utility functions that are yet to be
included in the package. We would like to keep the dependencies in this
package minimal; therefore, contributions should mostly use base R.
sessionInfo()
#> R version 4.2.1 (2022-06-23)
#> Platform: x86_64-pc-linux-gnu (64-bit)
#> Running under: Ubuntu 20.04.4 LTS
#>
#> Matrix products: default
#> BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
#> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
#>
#> locale:
#> [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8
#> [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8
#> [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C
#> [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C
#>
#> attached base packages:
#> [1] stats graphics grDevices datasets utils methods base
#>
#> other attached packages:
#> [1] BiocBaseUtils_0.99.10
#>
#> loaded via a namespace (and not attached):
#> [1] compiler_4.2.1 magrittr_2.0.3 fastmap_1.1.0 htmltools_0.5.3
#> [5] tools_4.2.1 yaml_2.3.5 codetools_0.2-18 stringi_1.7.8
#> [9] rmarkdown_2.15 knitr_1.39 stringr_1.4.0 xfun_0.32
#> [13] digest_0.6.29 rlang_1.0.4 renv_0.15.5 evaluate_0.16
Please report minimally reproducible bugs at our github issue page.