diff --git a/DESCRIPTION b/DESCRIPTION index 2c82166..466bd55 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: MetaboCoreUtils Title: Core Utils for Metabolomics Data -Version: 1.9.2 +Version: 1.9.3 Description: MetaboCoreUtils defines metabolomics-related core functionality provided as low-level functions to allow a data structure-independent usage across various R packages. This includes functions to calculate between ion diff --git a/NEWS.md b/NEWS.md index 29e7bf7..75ca395 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,11 @@ # MetaboCoreUtils 1.9 +## MetaboCoreUtils 1.9.3 + +- `containsElements` returns `NA` for `NA` and `FALSE` for invalid elements; + see issue + [#63](https://github.com/rformassspectrometry/MetaboCoreUtils/issues/63). + ## MetaboCoreUtils 1.9.2 - `countElements` returns `NA` for invalid elements instead of silently diff --git a/R/chemFormula.R b/R/chemFormula.R index 7bcde86..e6fd233 100644 --- a/R/chemFormula.R +++ b/R/chemFormula.R @@ -208,11 +208,16 @@ standardizeFormula <- function(x) { #' containsElements("C6H12O6", "H2O") #' containsElements("C6H12O6", "NH3") containsElements <- function(x, y) { - mapply( + r <- mapply( FUN = function(xx, yy)all(.sum_elements(c(xx, -yy)) >= 0), xx = countElements(x), yy = countElements(y), SIMPLIFY = TRUE, USE.NAMES = FALSE ) + ## return FALSE for invalid elements + r[is.na(r)] <- FALSE + ## return NA for NA as input + r[is.na(x) | is.na(y)] <- NA + r } #' @title subtract two chemical formula diff --git a/tests/testthat/test_chemFormula.R b/tests/testthat/test_chemFormula.R index f6349e3..a30acc9 100644 --- a/tests/testthat/test_chemFormula.R +++ b/tests/testthat/test_chemFormula.R @@ -113,6 +113,8 @@ test_that("containsElements", { expect_true(containsElements("C6H12O6", "H2O")) expect_false(containsElements("C6H12O6", "NH3")) expect_identical(containsElements("C6H12O6", NA), NA) + expect_false(suppressWarnings(containsElements("C6H12O6", "Z"))) + expect_false(suppressWarnings(containsElements("C6H12O6", ""))) expect_identical( containsElements("C6H12O6", c("H2O", "NH3")), c(TRUE, FALSE)